把前n(n<=10000)个整数顺次写在一起,123456789101112……,数一数0~9各出现多少次(输出10个整数,分别是0,1,2,……,9出现的次数)。
那么首先我们来分析一下这道题。那么这道题有没有陷阱呢?我们先稍微放一放,这个题稍微有点经验就知道一个算法,就是用字符串储存那么我们大致计算一下字符串最多有多少位,大约是1*9+2*90+3*900+4*9000+1大约不到四万个字符,这其实开销很大的,那么还有一种思路就是边增长边计数。用循环来看,看题来说似乎输入也就是只有一个n。
那么我们开干。
#include<stdio.h>
#include<string.h>
int main(){
int n;
scanf("%d",&n);
int a[10];
memset(a,0,sizeof(a));
for(int i=1;i<=n;i++){
int j=i;
while(j>0){
int x=j%10;//记录余数
a[x]++;
j=j/10;
}
}
for(int i=0;i<9;i++){
printf("%d ",a[i]);
}
printf("%d",a[9]);
return 0;
}
如有错误请联系我改正,谢谢。