这个题要注意数组的大小,以及位置,放到主函数外,数组开小了会出错
我的思路是9以下的数字直接计数,10以上的用循环取余截尾,利用switch计数即可
#include<stdio.h>
#include<string.h>
int num[100005];
int main(void)
{
int len, n;
scanf("%d", &n);
while(n--)
{
int a[11] = {0};
int temp, m, k, t;
scanf("%d", &m);
for(int i = 1; i <= m; i++)
{
num[i] = i;
if (num[i] < 10)
{
++a[i];
}
else
{
while(num[i] > 0)
{
k = num[i] % 10;
switch(k)
{
case 1: a[1]++;break;
case 2: a[2]++;break;
case 3: a[3]++;break;
case 4: a[4]++;break;
case 5: a[5]++;break;
case 6: a[6]++;break;
case 7: a[7]++;break;
case 8: a[8]++;break;
case 9: a[9]++;break;
case 0: a[0]++;break;
}
num[i] /= 10;
}
}
}
printf("%d %d %d %d %d %d %d %d %d %d\n", a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9]);
}
return 0;
}
https://vjudge.net/problem/UVA-1225