
题目大意:把前n个整数顺次写在一起:123456789101112...数一数0-9各出现多少次。
#include<stdio.h>
#include<string.h>
int main()
{
int k;
scanf("%d",&k);
while(k-->0){
int a[10] ;//保存输出
memset(a,0,sizeof(a));
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++){
int max = 1000;
while(i<max)//求出最接近i的10的倍数
max /=10;
if(max == 0) a[i]++;
else{
int t = i;//
while(max != 1){//遍历t每一位
a[t/max]++;
t-=t/max*max;
max/=10;
}
a[t]++;
}
}
for(int i=0;i<9;i++)
printf("%d ",a[i]);
printf("%d\n",a[9]);
}
return 0;
}
本文提供了一种解决 UVA 在线评测系统中编号为 3666 的问题的方法。该问题要求计算将 1 到 n 的整数连续拼接成一个长整数后,0 至 9 每个数字出现的次数。通过 C 语言实现,采用逐位统计的方法来计算每个数字的出现频率。
768

被折叠的 条评论
为什么被折叠?



