题目链接: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;
}
本文介绍了一种高效求解UVA 4458问题的方法,该问题要求找到给定整数n的最小生成元。通过预处理的方式,文章中的C语言代码实现了快速查询解决方案,避免了每次输入都重新计算。
250

被折叠的 条评论
为什么被折叠?



