题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=4458
题目大意:如果x加上x的各个数字之后得到y,就说x是y的生成元。给出n,求最小生成元。
#include<stdio.h>
#include<string.h>
#define maxn 100005
int ans[maxn];
int main()
{
int T,n;
memset(ans,0,sizeof(ans));
for(int m=1;m<maxn;m++){//一次性枚举所有生成元
int x = m,y=m;
while(x>0){
y+=x%10;
x/=10;
}
if(ans[y] == 0 || m<ans[y])
ans[y] = m;
}
scanf("%d",&T);
while(T--){
scanf("%d",&n);
printf("%d\n",ans[n]);//直接输出对应的生成元
}
return 0;
}