Hello大家好!很高兴我们又见面啦!给生活添点passion,开始今天的编程之路!
我的博客:<但凡.
欢迎点赞关注!
1、题目描述
如果x加上x的各个数字之和得到y,就说x是y的生成元。给出(1<=n<=100000),求最小生成元。无解输出0。
2、思路分析
我们首先想到的是遍历每个数, 找出他们的最小生成数。但这样的话如果我要求找五个数的最小生成数呢?我们就得遍历5次,显然这样效率不够高。所以我们不如索性一次性找到所有数的最小生成元,然后存放起来,最后查表即可。
3、题解
#include<stdio.h>
#define maxn 100000
int main()
{int T = 0;int m = 0;int arr[maxn] = { 0 };//初始化存放被生成数的数组int x = 0;int y = 0;//找出所有属于1——10000这个范围的被生成数,并记录他们的最小生成元for (m = 0;m < maxn;m++)//循环存入所有被生成数的最小生成元{x = m;y = m;while (x)//计算被生成数{y +=x % 10;x /= 10;}if (arr[y]==0||m<arr[y])//条件为当这个元素为0或新的被存入元素(生成元)更小{arr[y] = m;//记录这个被生成数y的最小生成元}}//输入要查找最小生成元的次数scanf_s("%d", &T);while (T){//输入想要查找的元素scanf_s("%d", &y);printf("%d\n", arr[y]);T--;}return 0;
}
今天的内容就分享到这,我们下期再见!