美文网首页
统计数字

统计数字

作者: fffzhou | 来源:发表于2018-06-03 09:49 被阅读0次

    题目

    计算数字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;
    }
    

    相关文章

      网友评论

          本文标题:统计数字

          本文链接:https://www.haomeiwen.com/subject/zyzdsftx.html