UVa1225 - Digit Counting 题解

题目

题目链接

UVa1225 - Digit Counting

题目大意

Trung不想写数学作业,于是他就数数字。12345678910111213。在这个数字序列里,0 出现了1次,1出现了6次,2出现了2次,3出现了3次,4到9每个数字出现了1次。现在他想搞一个程序来帮忙数数字。

第一行输入为测试的数据数量T(0<T<=20),接下来T行每行为1个测试数据。

样例输入

2
3
13

样例输出

0 1 1 1 0 0 0 0 0 0
1 6 2 2 1 1 1 1 1 1

题解

这道题几乎照着题目的意思答出来就行,不过考虑到如果每接受一次数据就算一次可能会超时,不如打个表。

Then show the code.

#include <stdio.h>
#include <string.h>

//digCou[i][j]表示数字j里i数字的数目
char digCou[10][10005];
int result[15];

int main(){

    //打表
    memset(digCou, 0, sizeof(digCou));
    for(int i=1; i<10000; i++){
        int temp = i;
        while(temp){
            digCou[temp%10][i]++;
            temp /= 10;
        }
    }

    int T;
    scanf("%d", &T);
    while(T--){
        int n;
        scanf("%d", &n);
        memset(result, 0, sizeof(result));
        //计算结果
        for(int i=1; i<=n; i++)
            for(int j=0; j<=9; j++)
                result[j] += digCou[j][i];
        //输出结果
        for(int i=0; i<=9; i++){
            printf("%d", result[i]);
            if(i != 9)
                printf(" ");
        }
        printf("\n");
    }
    return 0;
}
posted @ 2020-11-05 17:09  1v7w  阅读(122)  评论(0编辑  收藏  举报