习题3-3 数数字 UVa1225
感悟。
1、直接看英文原题的输入输出样例。
2、没写之前,思路就已成竹在胸了,写下来也比较顺畅,没费什么周折,想也没想肯定一次AC。
3、结果Runtime error,静态检查一遍代码,没有问题,重看英文题目,原来N<=10000,数组开得太小了,马上将s[1000]变成s[100000];提交AC。
4、该题有着 程序3-2开灯问题 程序3-4竖式问题 例题3-5生成元 影子。
附上代码
环境Dev-cpp4.9.9.2
#include <stdio.h>
#include <string.h>
char s[100000];//N<=10000,故数组开得比较大
char t[10];
int a[10];
int main(){
int T;
int n;
int i;
int len;
int first;
scanf("%d",&T);
while(T--){
memset(s,0,sizeof(s));//初始化字符串
memset(a,0,sizeof(a));
scanf("%d",&n);
for(i=1;i<=n;i++){
sprintf(t,"%d",i);//整数以字符串形式存储
strcat(s,t);
}
len=strlen(s);
for(i=0;i<len;i++){//相应数字位置自加1
a[s[i]-'0']++;
}
first=1;
for(i=0;i<=9;i++){
if(first){
first=0;
printf("%d",a[i]);
}else{
printf(" %d",a[i]);
}
}
printf("\n");
}
return 0;
}