为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

化糖 2017-08-14 16:30:04
题目是: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; }
查看完整描述

2 回答

?
遥不可及不放弃

TA贡献15条经验 获得超5个赞

你这个会有段错误吧,数组访问会越界

查看完整回答
2 反对 回复 2017-08-16
  • 化糖
    化糖
    怎么解决呢?
  • 慕用026480
    慕用026480
    定义Maxn为10045,并在生成生成元的循环中将循环停止的条件改为m<100001
  • 2 回答
  • 2 关注
  • 2144 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信