这题n是小于10000的; 如果直接打表需要最多:
10000 * 9 * 5 = 4.5 * 105的时间消耗 ,所以直接暴力把前面10000项列举出来,
代码:
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int ans[10010][11];
int main() {
int t;
cin >> t;
memset(ans, 0, sizeof(ans));
for (int i = 1; i <= 10000; i++) {
int temp = i;
while (temp) {
int x = temp % 10;
ans[i][x]++;
temp /= 10;
}
for (int j = 0; j <= 9; j++)
ans[i][j] += ans[i - 1][j];
}
while (t--) {
int n;
cin >> n;
for (int i = 0; i < 9; i++) {
printf("%d ", ans[n][i]);
}
printf("%d\n", ans[n][9]);
}
return 0;
}