这题难点在于,你如何对于数字进行处理,从而得到它每位的数
就用 (%10 /10)大法! 特别好用!请记住哦
而我对于数据小的,比较喜欢打表,就是,把所以情况都整一遍啦
#include <cstdio>
#include <cstring>
using namespace std;
int a[10][10005];
int main()
{
int n;
scanf("%d",&n); // a[][i] 数组表示1-i所有数 的 0-9分别的个数
for (int i = 1; i < 10001; i++)
{
int k = i;
while(k)
{
int h = k%10; //%10
a[h][i]++;
k/=10; // /10
}
for (int j = 0; j < 10; j++)
a[j][i]+=a[j][i-1];
}
while(n--)
{
int k;
scanf("%d",&k);
for (int i = 0; i < 10; i++)
{
if(i!=9)
printf("%d ",a[i][k]);
else
printf("%d\n",a[i][k]);
}
}
return 0;
}