紫书上的题,这道题不能用普通的 for 循环做,否则肯定超时,正如紫书上的说,要先打表,先把所有的结果存起来,然后在主函数中直接运用,这样可以减少运行时间;
#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>
using namespace std;
#define max 100005
int sum[max];
int main()
{
int n;
memset(sum,0,sizeof(sum));
for(int k=1;k<max;k++){
int x=k,y=k;
while(x>0) {y+=x%10;x=x/10;}
if(sum[y]==0||k<sum[y]) sum[y]=k;
}
cin>>n;
while(n--){
int m;cin>>m;
cout<<sum[m]<<endl;
}
return 0;
}