如果x加上x的各个数字之和得到y,就说x是y的生成元。给出n(1≤n≤100000),求最小生成元。无解输出0。例如,n=216,121,2005时的解分别为198,0,1979。
一,标准答案
#include<stdio.h>
#include<string.h>
#define maxn 100005
int ans[maxn];
int main() {
int 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;
}
while ((scanf("%d",&n) == 1))
{
printf("%d\n",ans[n]);
}
return 0;
}
二,思路解析
1,生产一个表,直接查表即可。
2,我当时的想法是输入一个数,是字符串的形式,然后对它各个位进行遍历。找出符合条件的最小的。但字符串的位数无法确定,故作罢。