程序设计入门8 生成元

如果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,我当时的想法是输入一个数,是字符串的形式,然后对它各个位进行遍历。找出符合条件的最小的。但字符串的位数无法确定,故作罢。

猜你喜欢

转载自blog.csdn.net/qq2285580599/article/details/79029593