1. 程式人生 > 實用技巧 >UVa1225 - Digit Counting 題解

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;
}