UVA - 1225
穷举法:
#include <bits/stdc++.h>
using namespace std;
int main(){
int T;
cin>>T;
int a[10];
int n,num;
while(T--){
cin>>n;
memset(a,0,sizeof(a));//使用格式注意
for(int i=1;i<=n;i++){
num=i;
while(num){
a[num%10]++;
num=num/10;
}
}
for(int i=0;i<=9;i++){
if(i!=0)
cout<<" "<<a[i];
else cout<<a[i];
}
cout<<endl;
}
return 0;
}
打表法:
#include <bits/stdc++.h>
using namespace std;
int main(){
int a[10000+1][10];//打表就是提前将所有情况都算好
int num;
memset(a,0,sizeof(a));
for(int i=1;i<10000;i++){
for(int j=0;j<10;j++){
a[i][j]=a[i-1][j];//前一个数的情况加上这个数的情况
}
num=i;
while(num){
a[i][num%10]++;
num/=10;
}
}
int T;
cin>>T;
while(T--){
int n;
cin>>n;
for(int i=0;i<10;i++){
if(i!=0)
cout<<" "<<a[n][i];
else cout<<a[n][i];
}
cout<<endl;
}
return 0;
}