统计数字

题目

计算数字k在0到n中的出现的次数,k可能是0~9的一个值

例如n=12,k=1,在 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12],我们发现1出现了5次 (1, 10, 11, 12)

分析

这个算法题目是求从0 ~ n的n+1个整数中k(0 ~ 9)出现的次数。
我们可以将数字拆分成每一位来求。
例如求n=54,k=3:
个位数的3出现在01,13,23,33,43,53,总共出现6次;
十位数的3出现在30,31,32,33,34,35,36,37,38,39,总共出现10次;
即54中的3总共出现了16次。
分析条件可以得出算法:

令m=n;
if(m%n>k) count+=(m/10+1)(10^n);
else if(m%n=k) count+=(10n)+n%(10num+1);
else count+=(m/10)
(10^num);

当n%10=0时,count=n/10+1即可。

CODE

最后程序如下

/*
cin>>n;cin>>k;
*/
main(){
    int count=0,num=1;
    int a;int m=n;
    if(k==0)return count=m/10+1;
    while(m>0){
        a=m%10;
        if(a>k){
            count+=num*(m/10+1);
         }
         else if(a==k){
             count+=num*(m/10)+n%num+1;
         }
         else{
             count+=num*(m/10);
         }
         m=m/10;
         num=num*10;
     }
     return count;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 80后这波婴儿潮,人口压力导致资源竞争激烈,父母省吃俭用要给孩子最好的,纸尿裤、奶粉、玩具等充斥着拼爹的气息。同事...
    笑笑爱笑smile阅读 3,500评论 11 60
  • 所有的人都看好我和伊凡。 我俩青梅竹马,两小无猜,注定要走入婚姻的殿堂。 能拥有伊凡这样的丈夫,是所有女人心中的梦...
    陆月晴阅读 309评论 0 7
  • 最近身体一直处于大毛病没有,小毛病不断的状态,主要是荨麻疹,差不多连续吃了半个多月的药了,这几天都还有点反复。 这...
    Misss张阅读 445评论 0 0
  • (本文参加#感悟三下乡,青春筑梦行#活动,本人承诺,文章内容为原创,且未在其他平台发表过。) 从放假回家到再次来到...
    风萧扬阅读 357评论 0 0

友情链接更多精彩内容