您的位置:首页 > 其它

算法竞赛入门经典习题3-3数数字(Digit Counting,ACM/IMPC Danang 2007,UVa1225)

2018-03-14 14:12 513 查看
把前n(n<=10000)个整数顺次写在一起,123456789101112……,数一数0~9各出现多少次(输出10个整数,分别是0,1,2,……,9出现的次数)。
那么首先我们来分析一下这道题。那么这道题有没有陷阱呢?我们先稍微放一放,这个题稍微有点经验就知道一个算法,就是用字符串储存那么我们大致计算一下字符串最多有多少位,大约是1*9+2*90+3*900+4*9000+1大约不到四万个字符,这其实开销很大的,那么还有一种思路就是边增长边计数。用循环来看,看题来说似乎输入也就是只有一个n。
那么我们开干。
#include<stdio.h>
#include<string.h>
int main(){
    int n;
    scanf("%d",&n);
    int a[10];
    memset(a,0,sizeof(a));
    for(int i=1;i<=n;i++){
        int j=i;
        while(j>0){
            int x=j%10;//记录余数
            a[x]++;
            j=j/10;
        }
    }
    for(int i=0;i<9;i++){
        printf("%d ",a[i]);
    }
    printf("%d",a[9]);
    return 0;

}
如有错误请联系我改正,谢谢。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: