魔法攻击28独立30宝珠袋1到28的整数

3928人阅读
数据结构/算法(33)
输入一个整数n,求从1 到n 这n 个整数的十进制表示中1 出现的次数。
例如输入12,从1 到12 这些整数中包含1 的数字有1,10,11 和12,1 一共出现了5 次。
注:这是一道广为流传的google 面试题。
我们每次判断整数的个位数字是不是1。如果这个数字大于10,除以10 之后再判断个位数字是不是1。(对每一个数x,x先与10取余,然后判断x/10之后,是否为0,不为0则继续上述操作&复杂度为o(n) )
代码如下:
/*--------------------------------
Copyright by yuucyf.
----------------------------------*/
#include &stdafx.h&
#include &iostream&
int ItemContain1Count(int nValue)
int nNum = 0;
while (nValue)
if ((nValue % 10) == 0x1)
nValue /= 10;
int Sum(int n)
if (n &= 0)
int nSum = 0;
for (int i32I = 1; i32I &= i32I++)
nSum += ItemContain1Count(i32I);
int _tmain(int argc, _TCHAR* argv[])
int i32N = 0, i32Num = 0;;
cout && &请输入整数N=&;
cin && i32N;
cout && &从1~& && i32N && &之间含有1的个数为:& && Sum(i32N) &&
思路一有一个非常明显的缺点就是每个数字都要计算1 在该数字中出现的次数,因此时间复杂度是O(n)。当输入的n 非常大的时候,需要大量的计算,运算效率很低。
我们用一个稍微大一点的数字21345作为例子来分析。我们把从1到21345的所有数字分成两段,即1--21345。先来看中1出现的次数。1的出现分为两种情况:一种情况是1出现在最高位(万位)。从1到21345的数字中,1出现在这10000个数字的万位中,一共出现了1次方)次;另外一种情况是1出现在除了最高位之外的其他位中。例子中,这20000个数字中后面四位中1出现的次数是2000次(2*1000,其中2的第一位的数值,1000是因为数字的后四位数字其中一位为1,其余的三位数字可以在0到9这10个数字任意选择,由排列组合可以得出总次数是2*1000)。
至于从1到1345的所有数字中1出现的次数,我们就可以用递归地求得了。这也是我们为什么要把1-21345分为1--21345两段的原因。因为把21345的最高位去掉就得到1345,便于我们采用递归的思路。
分析到这里还有一种特殊情况需要注意:前面我们举例子是最高位是一个比1大的数字,此时最高位1出现的次数10000(对五位数而言)。但如果最高位是1呢?比如输入12345,从1这些数字中,1在万位出现的次数就不是10000次,而是2346次了,也就是除去最高位数字之后剩下的数字再加上1。
使用递归21345&,则需要对21345的每一个10进制位,进行递归计算。对万位,千位,百位,十位,个位&
&&&&&& 即首位不为0,则可以分别计算 345 45 5&&&&&
&&&&& (1) 当首位最高位为1时,含有1的个数为 10000
&&&&&& 首位可以为0 , 1 ,则后四位其中有1位为1的个数为 ,2* 10(3)*4 = 8000& 合计18000&&&&&&&
&&&& (2) 下面计算1345
&&&&&&& 首位为1,则为& 346
&&&&&&& 其余位为 (首位可以为0) 3 * 10(2) = 30& 合计376&&&
&&&& (3)下面计算345
&&&&&&&& 首位为1& 10的2次方
&&&&&&&& 首位可以为(0 1 2) 等于3的情况,& 3 * 2 *10& 合计160
&&&&&&&& 剩下的循环即求300- 345
&&&& (4)下面计算45&&&&
&&&&&&&& 首位为1, 10的1次方
&&&&&&&& 首位不计,首位可以取(0 1 2 3) 4 * 1& 合计 14
&&&&& (5)下面计算5
&&&&&&&& 判断长度小于1,直接返回
&求1到n中任意进制的数的个数,递归公式如下:&&&&&
&总结对于任意的1到n,求所给定的字符c的个数&&&
&&str = abcdefgh ,&len = strlen(abcdefgh)&&&&&
&&&&&&& (1)当首位等于*str = c时 ,Q(abcdefgh) = abcdefgh + 1 + (*str -'0')*(len -1)*10^(len -2) + Q(bcdefgh)
&&&&&&& (2)当首位为 *str & c 时 ,Q(abcdefgh) = 10^(m-1) + (*str - '0') * (len 1) *10^(len -2) + Q(bcdefgh)
&&&&&&& (3)当首位为 *str & c时,&& Q(abcdefgh) =& (*str - '0') * (len -1) *10^(len -2) + Q(bcdefgh)
代码如下:
int NumberOf1(char * pStr, char* c) //c表示查找pStr中含有c字符的数字的个数
return 0 ;
int nLen = strlen(pStr) ;
if (nLen == 1)
if(*pStr &= *c)
return 1 ;
return 0 ;
if (*pStr == *c)
//当首位为c的时候
return strtoul(pStr+1, NULL, 10) + 1 + (*pStr - '0') * (nLen - 1) * (int)pow(10.0, (double)(nLen - 2)) + NumberOf1(pStr + 1, c);
else if (*pStr & *c)
return (int)pow(10.0, (double)nLen-1) + (nLen - 1) * (*pStr - '0') * (int)pow(10.0, (double)(nLen - 2))
+ NumberOf1(pStr+1, c) ;
return (nLen - 1) * (*pStr - '0') * (int)pow(10.0, (double)(nLen - 2)) + NumberOf1(pStr+1, c) ;
第二种算法的时间复杂度为:O(k), 其中K为常数,是pstr的长度.
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:220298次
积分:2712
积分:2712
排名:第10107名
原创:50篇
转载:24篇
评论:82条
(2)(1)(2)(1)(1)(12)(2)(5)(14)(6)(8)(10)(1)(2)(2)(4)(1)登录 | 注册
没有账号?
下次自动登录
门门魔法袋1
这个人很懒,什么都没有留下。
发布的声音(0)
Ta关注的人(7)新人注册得
666元变美大礼包
快来下载领取吧!
您有新的订单
脸一直是圆脸,医院离家挺近的,看到有活动,团购了几个特价商品,去的时候主要想瘦脸,专做手术项目的李医生帮我面诊的,我的咬肌不算大的太严重,主要是前面有两坨肉肉,用肉毒素没什么用,又团了一只溶脂针,而且我的脸一边大,一边小,医生说可能是遗传也可能跟习惯有关,嘴角也是一边低一边高,有点小明显,需要调整一下。开完单子就上楼了,下午医院比较忙,前面有2个人等,米医生一直忙,最后李医生帮我打的,没有敷麻药,溶脂针稍痛。不过到后来可以忍受,就是扎的次数多点,感觉不深都是扎在表皮,打完了医生帮我揉了一下,按了10分钟就完事了,一起等的人说好像瘦了,hoho~应该没有那么快,我希望赶快把两坨肉肉剪掉,这样上镜再也不用肉脸了。唯一一点就是右脸青了一块,不过不仔细看看不出来,应该过几天就不过不仔细看看不出来,应该过几天就消失了
&1280 248人预约
宝贝现在脸有没有瘦
一针800吗?是打两边脸各三下 就是三角区吗
我咋感觉一点都没瘦呢
我想问一下溶脂针多少钱
溶脂针价格亲?
我想去他们家打溶脂针和瘦脸针,你后面怎么没有更新效果了,
现在瘦的多少?
溶脂多少钱?
发表回复:
可能预约了此产品
热度: 3390预约数: 930
&999 1.5折
热度: 1594预约数: 1166
&380 0.8折
热度: 3529预约数: 437
&980 2.7折
热度: 682预约数: 386
&1280 5.1折
热度: 263预约数: 79
&1500 2.2折
热度: 1180预约数: 218
&1999 2.3折
热度: 907预约数: 172
&999 1.5折
热度: 483预约数: 205
&8800 2.3折
热度: 547预约数: 178
&2980 3.4折
热度: 311预约数: 30
&69800 5.5折
新氧不是整形医院,新氧不是整形中介
不从消费者身上赚钱
新氧是一个爱美女孩自发聚集的美丽社区
也有整形、皮肤科医生活跃在站内
(C) 2016 北京新氧科技有限公司版权所有正确合理的方法是(  )
A.按整数乘法的法则进行计算.
=(28-1)×
D.无法确定
,=(28-1)×
.故选:B.
为您推荐:
扫描下载二维码打算买魔法袋,各位觉得那玩意儿的坑有多大?_uc松鼠大战吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0可签7级以上的吧50个
本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:11,855贴子:
打算买魔法袋,各位觉得那玩意儿的坑有多大?
打算买魔法袋,各位觉得那玩意儿的坑有多大?
随后会放制作过程
1L放空,被度娘吞了好多...
说起林更新,大家会想起...
美国总统选举初步结果揭...
据说关注【绝味美食吧】...
爆照吧2016年年度吧花吧...
男生吧吧务组是由一群...
没错,本贴就是来说说明...
电影一旦开始在院线上映...
如果说2015年是中国电影...
图分别为鹿晗、李易峰、...
前年给店里化妆师画妆镇...
国民影帝,摸金而来
影帝加持神还原,等你来战!
特坑…上次我买了三个全开一百孵化点
蓝碎片太多
或许会出狂战,不过几率蛮小的我出过哦,不过合装时被吞了        ~~~幸福在于发现,笑对美好一天。^ω^       --来自助手版贴吧客户端
天又多大坑就多大
很坑的,相当于升武、技一样,纯属看人品,上次我开了个魔法袋,出了个天使果实
呼呼,我打算买1到2个试试!!
她妈我好不容易买了三个,算是两个属性碎片,之后不服气,有买了一个,100碎片。同学第一次买就200碎片。有时候觉得这游戏没法玩
松鼠网爆款海量好货返场大促,错过今天,再等一年!.&苏宁易购&为你而省,急速物流,百城半日送达!
运气好出狂,运气背孵化点
坑你没商量。。
不会买了,真心坑爹
大坑小坑。。。
买了2个连开出圣雄
这个出狂的几率小的很
这玩意已经不能用坑来形容了
航弹炸开的坑你说大不大
贴吧热议榜
使用签名档&&
保存至快速回贴}

我要回帖

更多关于 苏菲口袋魔法 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信