【算法竞赛 入门经典】习题3-3 数数字(Uva125)
程序员文章站
2022-04-08 09:13:39
...
一、题目
二、解题思路
题目的意思是对输入的N,将1-N顺序排列起来,计算其中0-9各数字出现的次数,本来打算找规律,但是看到N<10000,就选择了暴力解法,直接采用循环去统计1-N每一个数字中出现0-9的次数,加起来就是总的次数。
重点在于用count数组来统计0-9各数字出现的次数。然后就是要注意输出的格式,最后一个数字后面不应该有空格
三、代码
#include<stdio.h>
#include<string.h>
using namespace std;
int main(){
int count[10];//用于记录0~9各数字出现的次数
int T,N;
scanf("%d",&T);
while(T--){
memset(count,0,sizeof(count));
scanf("%d",&N);
for(int i=1;i<=N;i++){ //由于N<10000,所以采用了暴力求解,对1-N的每一个数字进行统计
if(i<10){
count[i]++;
}else if(i<100){
count[i/10]++;
count[i%10]++;
}else if(i<1000){
count[i/100]++;
count[i/10%10]++;
count[i%10]++;
}else if(i<10000){
count[i/1000]++;
count[i/100%10]++;
count[i/10%10]++;
count[i%10]++;
}
}
printf("%d",count[0]);//注意格式问题
for(int i=1;i<10;i++){
printf(" %d",count[i]);
}
printf("\n");
}
return 0;
}