题目是:
x加上x的的各位数字得到y,称x为y的生成元。给出n(1<=n<=100000),求最小生成元。无解输出0。以下是示例代码。
问题是,我觉得if语句那一行的第二个判断条件是不可能为真的,因为ans[y]如果非0的话,这个值一定比现在的m小,因为m是递增的呀。
#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;//从1-maxn找每个数最小生成元,没有为0 } scanf("%d",&T); while(T--) { scanf("%d",&n); printf("%d\n",ans[n]);//输出每个数的最小生成元 } return 0; }
遥不可及不放弃