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;
}
不忘初心方得始终