zoukankan      html  css  js  c++  java
  • 数数字

    题目

    把前n(n<=10000)个整数顺次写在一起:123456789101112...数一数0-9各出现多少次(输出10个整数,分别是0,1,...,9出现的次数)。

    分析

    1.直接求每个n的0-9出现的次数。

    2.先求出1-10000之前每个数字对应的0-9出现的次数。

    第一种方式效率相对第二种方式较低。

    第一种方式

    c实现

    #include<stdio.h>
    #include<string.h>
    #define maxn 13
    int ans[maxn];
    
    int main()
    {
        int a,b,c;
        memset(ans,0,sizeof(ans));
        scanf("%d",&a);
        for(int i=1;i<=a;i++){
            b = i;
            //求每个数字中的对应0-9的个数,并加到对应数组 
            do
            {
                c = b%10;
                ans[c]++;
                b = b/10;
                
            }while(b!=0);
        }
        
        for(int i=0;i<10;i++)
        {
            printf(" %d",ans[i]);
        }
        return 0;
    }

    第二种方式

    c实现

    #include<stdio.h>
    #include<string.h>
    #define maxn 10010
    int ans[maxn][10];
    
    int main()
    {
        int b,c,n;
        memset(ans,0,sizeof(ans));
        for(int i=1;i<=10000;i++)
        {
            for(b=i;b!=0;)
            {
                ans[i][b%10]++;
                b /= 10;
            }
            for(int j=0;j<10;j++)
            {
                ans[i][j] += ans[i-1][j];
            }
        }
        scanf("%d",&n);
        for(int i=0;i<10;i++)
        {
            printf("%d ",ans[n][i]);
        }
    }

    这种方式会利用上一个数中统计到的对应的0-9的个数,与当前数的0-9的个数求和来得到从0到n的对应的0-9的个数。

  • 相关阅读:
    OpenSLAM
    CAD&CG GDC 2018大会论文录用名单
    hdu4328(经典dp用悬线法求最大子矩形)
    hdu3729(二分图)
    hdu 4055(经典问题)
    Codeforces Round #207 (Div. 1) B (gcd的巧妙运用)
    hdu1066(经典题)
    zoj3662(dp)
    zoj3659(经典并查集)
    hdu4565(矩阵快速幂+经典的数学处理)
  • 原文地址:https://www.cnblogs.com/Vincent-yuan/p/12941647.html
Copyright © 2011-2022 走看看