问题描述:如果x加上x的各个位数之和得到y,则称x是y的生成元。给出n(1<=n<=100000),求其最小的生成元,无解输出0.
思路分析:求一个数的每个位数之和不难,但每次求一个n,都要枚举n-1个数据。因此我们需要更快的方法。即利用一个长度为100000数组,把每个数组索引值对应的最小生成元存到它的值当中。例如计算的1为2的生成元,就把 “数组名[2] = 1 ”,当输入数据n时,只需输出 数组名[n]即可。
代码如下:
#include"stdio.h"
int main(){
int a[100005]={0};
for(int i=1;i<100005;i++){
int x=i,y=i;
while(x>0){
y+=x%10;
x/=10;
}
if(a[y]==0&&y<100005){
a[y] = i;
}
}
int n;
scanf("%d",&n);
printf("%d",a[n]);
return 0;
}