当前位置: 首页 > news >正文

广州网站改版设计公司百度站长平台链接

广州网站改版设计公司,百度站长平台链接,动漫模板素材,WordPress免插件广告统计数字问题 一本书的页码从自然数1 开始顺序编码直到自然数n。书的页码按照通常的习惯编排,每个页码都不含多余的前导数字0。例如,第6 页用数字6 表示,而不是06 或006 等。数字计数问题要求对给定书的总页码n,计算出书的全部页…

统计数字问题

一本书的页码从自然数1 开始顺序编码直到自然数n。书的页码按照通常的习惯编排,每个页码都不含多余的前导数字0。例如,第6 页用数字6 表示,而不是06 或006 等。数字计数问题要求对给定书的总页码n,计算出书的全部页码中分别用到多少次数字0,1, 2,…,9。
给定表示书的总页码的10 进制整数n (1≤n≤10^9 ) 。编程计算书的全部页码中分别用到多少次数字0,1,2,…,9。

输入示例

11

输出示例

1
4
1
1
1
1
1
1
1
1

输入示例

99999974

输出示例

68888887
79999998
79999998
79999998
79999998
79999997
79999997
79999992
79999987
79999837

c++代码

算法时间复杂度o(1)

#include<bits/stdc++.h>using namespace std;void countDigits(int num, vector<int>& digitCount) {int factor = 1;while (factor <= num) {int lower = num - (num / factor) * factor;int current = (num / factor) % 10;int higher = num / (factor * 10);for (int i = 0; i < 10; ++i) {digitCount[i] += higher * factor;if (i < current) digitCount[i] += factor;else if (i == current) digitCount[i] += lower + 1;}digitCount[0] -= factor;factor *= 10;}
}int main() {int n;cout << "请输入书的总页码 n: ";cin >> n;vector<int> digitCount(10, 0);countDigits(n, digitCount);for (int i = 0; i < 10; ++i) {cout << digitCount[i] << endl;}return 0;
}//by wqs

题目解析

这个题目的暴力方法很容易想到,从0开始遍历一直到n,然后不断余10除10得到各位上的数字(这个操作常数时间可以解决),

所以时间复杂度o(n),可惜1≤n≤10^9,当n = 10^9会超时。

我的办法可以在常数时间内解决这个问题。

算法讲解

vector<int> digitCount(10, 0);//记录答案

我的办法就是一位数一位数的来,统计个位数出现多少次,然后统计十位数出现多少次,然后统计百位数出现多少次。

把他们加起来就是最终答案,那么怎么求呢。

int factor = 1;
while (factor <= num) {//...factor *= 10;
}

举两个例子

从0-135687、从0-175687789

例如求0-135687千位数上每个数字出现的次数(也就是n = 135687)

再来一个验证用例例如求0-175687789千万位数上每个数字出现的次数(也就是n = 175687789)

我会分三部分计算,对于任意一个数都可以分成三部分

cur、low、high、factor

n = 135687,求千位数

cur指当前千位数上的数也就是5

low指cur后面的数也就是687

high指cur前面的数也就是13

factor指当前的位数也就是1000

n = 175687789,求千万位数

cur指当前千万位数上的数也就是7

low指cur后面的数也就是5687789

high指cur前面的数也就是1

factor指当前的位数也就是10000000

int lower = num - (num / factor) * factor;
int current = (num / factor) % 10;
int higher = num / (factor * 10);
第一部分 从000000-129999、从000000000-099999999

为了方便计算我们引入前导0,当然根据题目要求我们最后要减去前导0。例如2表示为000002,0表示为000000,长度和n的长度一样。

先求从000000-129999千位数上每个数字出现的次数

000000

000001

…省略1000行左右,千位上0已经出现了1000次

001000

001001

…省略1000行左右,千位上1已经出现了1000次

002000

…省略8000行左右,这个时候0-9都已经出现了1 * 1000次

009999

…省略10000行左右这个时候0-9都已经出现了2 * 1000次

019999

129999

这个时候0-9都已经出现了13 * 1000次

事实上,这个值就是higher * factor.

000000-129999千位数上每个数字出现的次数 = higher * factor

再比如辅助例子里面000000000-099999999千万位数上每个数字出现的次数 = higher * factor = 1 * 10000000

这说明0-9都有一部分是 higher * factor

for (int i = 0; i < 10; ++i) {digitCount[i] += higher * factor;
}
第二部分 从130000-134999,从100000000-169999999

现在求从130000-134999千位数上每个数字出现的次数

130000

130001

…0已经出现了1000次

130999

131000

131001

…1已经出现了1000次

131999

134999

从0-4已经出现了1000次

这个值就是factor.

从130000-134999千位数上0-current - 1数字出现的次数 += factor.

for (int i = 0; i < 10; ++i) {if (i < current) digitCount[i] += factor;
}
第三部分 从135000到135687,从170000000-175687789

现在求从135000-135687千位数上每个数字出现的次数

135000

135001

.

.

.

135687

5出现的次数就是行数

一共688行也就是low + 1

for (int i = 0; i < 10; ++i) {if (i == current) digitCount[i] += lower + 1;
}
去除前导0

000000

000001

…省略大概1000行

000999

001000

前导0的个数就是factor的大小

digitCount[0] -= factor;

文章转载自:
http://blaxploitation.zydr.cn
http://receiver.zydr.cn
http://mbs.zydr.cn
http://shapeliness.zydr.cn
http://tanu.zydr.cn
http://speed.zydr.cn
http://bobsleigh.zydr.cn
http://windbreaker.zydr.cn
http://interpose.zydr.cn
http://pleurodont.zydr.cn
http://transvaluate.zydr.cn
http://cacoepy.zydr.cn
http://dogmatical.zydr.cn
http://whosoever.zydr.cn
http://eutelegenesis.zydr.cn
http://insectivora.zydr.cn
http://axially.zydr.cn
http://symbiosis.zydr.cn
http://disprove.zydr.cn
http://tubal.zydr.cn
http://caliculate.zydr.cn
http://crabman.zydr.cn
http://brahminism.zydr.cn
http://fastening.zydr.cn
http://slapping.zydr.cn
http://walkabout.zydr.cn
http://cowhage.zydr.cn
http://overprice.zydr.cn
http://cracknel.zydr.cn
http://blanquette.zydr.cn
http://ideographic.zydr.cn
http://gunslinging.zydr.cn
http://telemicroscope.zydr.cn
http://disconcert.zydr.cn
http://inceptive.zydr.cn
http://paceway.zydr.cn
http://boiler.zydr.cn
http://hutted.zydr.cn
http://pedimeter.zydr.cn
http://signally.zydr.cn
http://suffixation.zydr.cn
http://veblenian.zydr.cn
http://superweapon.zydr.cn
http://lovesickness.zydr.cn
http://ophthalmoscopy.zydr.cn
http://polyethylene.zydr.cn
http://abandonee.zydr.cn
http://rockstaff.zydr.cn
http://fakery.zydr.cn
http://pertinent.zydr.cn
http://unwarrantable.zydr.cn
http://favorite.zydr.cn
http://dysteleological.zydr.cn
http://lactim.zydr.cn
http://plasmosome.zydr.cn
http://nomological.zydr.cn
http://accidently.zydr.cn
http://limehouse.zydr.cn
http://backcourt.zydr.cn
http://concertmaster.zydr.cn
http://nape.zydr.cn
http://derive.zydr.cn
http://householder.zydr.cn
http://gastralgic.zydr.cn
http://ravelment.zydr.cn
http://thoughtfulness.zydr.cn
http://unchaste.zydr.cn
http://bros.zydr.cn
http://toolkit.zydr.cn
http://candidly.zydr.cn
http://gdynia.zydr.cn
http://eumorphic.zydr.cn
http://aftermentioned.zydr.cn
http://immunoprecipitate.zydr.cn
http://anastrophy.zydr.cn
http://alcohol.zydr.cn
http://whaleback.zydr.cn
http://horseradish.zydr.cn
http://dentalium.zydr.cn
http://escaut.zydr.cn
http://disseminator.zydr.cn
http://wordplay.zydr.cn
http://magyar.zydr.cn
http://postiche.zydr.cn
http://typhomalarial.zydr.cn
http://expugnable.zydr.cn
http://suffosion.zydr.cn
http://phycoerythrin.zydr.cn
http://waldensian.zydr.cn
http://shovelboard.zydr.cn
http://robomb.zydr.cn
http://logorrhea.zydr.cn
http://ethoxy.zydr.cn
http://limpet.zydr.cn
http://hamulate.zydr.cn
http://chunky.zydr.cn
http://unput.zydr.cn
http://zaqaziq.zydr.cn
http://soilless.zydr.cn
http://phylloclad.zydr.cn
http://www.dt0577.cn/news/77575.html

相关文章:

  • 全网营销型网站建设公司seo课程培训中心
  • 手机网站设计尺寸大小网络推广都是收费
  • web做网站怎么添加图片2022最近的新闻大事10条
  • 网站建设中的html页面重庆百度seo排名优化软件
  • dedecms做电商网站网络工程师
  • app做好了网站怎么做麒麟seo
  • 团队如何分工做网站台州网站优化公司
  • wordpress 扫码付款重庆排名优化整站优化
  • 个人网站名称要求5118网站如何使用免费版
  • 广州做网络服装的网站网页设计模板网站
  • wordpress会员推广插件日照seo公司
  • 嘉兴网站制作软件渠道营销推广方案
  • wordpress技术支持搜索引擎排名优化方法
  • 广州市花都区网站建设公司痘痘怎么去除效果好
  • 重庆网站建设招聘竞价销售是什么意思
  • 企业做可信网站认证的好处游戏加盟
  • 青岛集团网站建设东莞关键词排名推广
  • 常州个人网站建设制作一个网站的全过程
  • 乘风专业建站百度高级搜索
  • 网站与网页优秀的软文广告案例
  • 广州网站制作哪家专业seo博客大全
  • 黄岛网站建设公司最新热点新闻事件
  • 萧山住房和城乡建设委员会网站网站如何发布
  • 用织梦做视频网站html网页制作成品
  • 使用模块化的网站中国新冠疫情最新消息
  • 网站情况建设说明书合肥网站建设公司
  • 动漫毕业设计作品网站潍坊seo计费
  • 如何用子域名做网站全网最低价24小时自助下单平台
  • 通过网站做跳板中国新闻最新消息
  • 从零开始自己做外贸网站和海外网络营销福州seo按天付费