要点:
1.将10000个数所对应的情况制作成表,先全部算出所对应的值,然后输入时调用对应值
源代码:
#include<stdio.h>
#include<string.h>
int a[10005][10];
int main()
{
memset(a, 0, sizeof(a)); //将数组中所有数都赋值为0否则会随机输出
int i, j, m, n;
for (i = 1; i < 10005; ++i)
{
for (j = 0; j < 10; ++j)
a[i][j] = a[i - 1][j]; //前一个数的值为前所有数的值,后一个数先赋值为前一个数的值使对应的数的值包括前面所以数的值,后面再增加
m = i;
while (m)
{
a[i][m % 10]++; //通过m计算,与j无关,在第一个for语句内
m = m / 10; //一个常见的计算各位数字的算法
}
}
scanf("%d", &n);
while (n--)
{
int t;
scanf("%d", &t);
for (j = 0; j < 9; j++)
printf("%d ", a[t][j]);
printf("%d\n", a[t][9]); //最后一个后不跟空格所以单独输出
}
return 0;
}
学习心得:
1.可以先将所有要求的数都计算出来列表从而调用输出
2.数组一开始应先用memset全赋值为0,否则会输出-2157813415这种乱数