题目
把前$n$个整数顺次写在一起 :123456789111213…
数一数 0至9 个出现多少次 ?
输入
2
3
13
输出
0 1 1 1 0 0 0 0 0 0
1 6 2 2 1 1 1 1 1 1
思路
小于9的直接加 。
其他则分解每一位加。
#include <bits/stdc++.h>
using namespace std ;
const int N = 1e4 + 5 ;
int n ;
int main ( ) {
cin >> n ;
for ( int k = 1 ; k <= n ; k ++ ) {
int s ;
cin >> s ;
if ( s < 10 ) { // 特判
for ( int i = 0 ; i < 9 ; i ++ )
if ( i <= s && i ) cout << 1 << ' ' ;
else cout << 0 << ' ' ;
if ( s == 9 ) cout << 1 ; // 最后一位没有空格
else cout << 0 ;
cout << endl ;
continue ;
}
int ans[10] = { 0 } ;
for ( int j = 1 ; j <= s ; j ++ ) {
int i = j ;
if ( i < 10 ) { // 小于9 ,直接加
ans[i] ++ ;
continue ;
}
while ( i > 0 ) { // 分解
ans[i % 10] ++ ;
i /= 10 ;
}
}
for ( int i = 0 ; i < 9 ; i ++ )
cout << ans[i] << ' ' ;
cout << ans[9] ; // 最后一位没有空格
cout << endl ;
}
return 0 ;
}