UVa 1583生成元问题C语言实现

题目是:

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;
}
化糖
浏览 2188回答 2
2回答

遥不可及不放弃

你这个会有段错误吧,数组访问会越界
打开App,查看更多内容
随时随地看视频慕课网APP