两种解题方法:
1. 暴力
#include <cstdio>
#include <cstring>
using namespace std;
int ans[15];
int main()
{
int t;
scanf("%d", &t);
while(t--)
{
memset(ans, 0, sizeof(ans));
int n;
scanf("%d", &n);
for(int i = 1; i <= n; i++)
{
int temp = i;
while(temp > 0)
{
ans[temp%10]++;
temp /= 10;
}
}
for(int i = 0; i < 9; i++)
printf("%d ", ans[i]);
printf("%d\n", ans[9]);
}
return 0;
}
2.
#include <cstdio>
using namespace std;
const int maxn = 10005;
int a[maxn][10];
int t, n;
int main()
{
scanf("%d", &t);
for(int i = 1; i <= 10000; i++)
{
int now = i;
for(int j = 0; j < 10; j++)
a[i][j] = a[i-1][j];
while(now > 0)
{
int k = now%10;
a[i][k]++;
now /= 10;
}
}
while(t--)
{
scanf("%d", &n);
for(int i = 0; i < 9; i++)
printf("%d ", a[n][i]);
printf("%d\n", a[n][9]);
}
return 0;
}