题目大意:输入一个大于 0 小于 10000 的整数 n ,计算数列“ 1,2,3,…… ,n ”中每个数字的每位数中1~9出现的次数。
解题思路:用求余和除 10 来读取一个数字的每位数,用 switch-case语句来记录 1~9 每个数字出现的次数。
#include<iostream>
using namespace std;
int main() {
int n , a[20][10] = {0}, m , i , j , t ;
cin >> n;
for( j = 0 ; j < n ; j++ ) {
cin >> m;
for( i = 1 ; i <= m ; i++ ) {
t = i;
do{
switch( t % 10 ){
case 0: a[j][0] ++ ; break ;
case 1: a[j][1] ++ ; break ;
case 2: a[j][2] ++ ; break ;
case 3: a[j][3] ++ ; break ;
case 4: a[j][4] ++ ; break ;
case 5: a[j][5] ++ ; break ;
case 6: a[j][6] ++ ; break ;
case 7: a[j][7] ++ ; break ;
case 8: a[j][8] ++ ; break ;
case 9: a[j][9] ++ ; break ;
}
t /= 10 ;
}while(t != 0);
}
}
for( j = 0 ; j < n ; j++ ) {
for( i = 0 ; i < 9 ; i++ ) {
cout << a[j][i] << " " ;
}
cout << a[j][9] << endl;
}
return 0;
}