| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 697 人关注过本帖
标题:求完数,我觉得算法没问题,但就是死循环,不知哪里少了一步,谢谢各位帮忙
只看楼主 加入收藏
tony0708
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2009-4-21
结帖率:100%
收藏
 问题点数:0 回复次数:8 
求完数,我觉得算法没问题,但就是死循环,不知哪里少了一步,谢谢各位帮忙
求1-1000的完数,就是一个数敲好等于它的因子之和,比如6=1+2+3,28=1+2+4+7+14,答案是1-1000有三个,我编的显示是28,而且一直有很多,是死循环,想请各位有时间把我看看,谢谢了



#include<stdio.h>
void main()
{
    int m,i,a[10]={0},j=0;        /*数组用来存放因子,因为1024是10个2相乘,小于1000的数因子个数肯定由此小于10,所以定义了10*/
    for(m=2;m<1000;m++)
    {
        for(i=0;i<10;i++)        /*让数组中元素每次开始都为,且j=0,都从0开始存放*/
            a[i]=0;
            j=0;
        
        for(i=1;i<m;i++)        /*求因子*/
        {
            if(m%i==0)
            {a[j]=i;j++;}
        }
        
        if(a[0]+a[1]+a[2]+a[3]+a[4]+a[5]+a[6]+a[7]+a[8]+a[9]==m)
            printf("%d\n",m);
   
    }
}



[ 本帖最后由 tony0708 于 2009-10-29 10:56 编辑 ]
搜索更多相关主题的帖子: 算法 
2009-10-29 10:52
UserYuH
Rank: 12Rank: 12Rank: 12
来 自:毅华
等 级:火箭侠
威 望:8
帖 子:720
专家分:3300
注 册:2009-8-10
收藏
得分:0 
for(i=1;i<m;i++)        
        {
            if(m%i==0)
            {a[j]=i;j++;} /* 不会死循环,但这句会越界,a数组大小是10,如m等60,60的因子数就大于10 */
        }

努力—前进—变老—退休—入土
2009-10-29 12:16
pgy
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:C
等 级:小飞侠
威 望:8
帖 子:1248
专家分:2329
注 册:2009-9-23
收藏
得分:0 
少了user告诉你答案这一步

我可好玩啦...不信你玩玩^_^
2009-10-29 12:25
tony0708
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2009-4-21
收藏
得分:0 
回复 2楼 UserYuH
晓得了,谢谢。
我理解错了,以为因子总个数不超过10,其实有的。
谢谢啦
2009-10-29 12:35
山区
Rank: 1
等 级:新手上路
帖 子:16
专家分:3
注 册:2009-10-27
收藏
得分:0 
看看,可以提高很多。顶……

[ 本帖最后由 山区 于 2009-10-29 13:42 编辑 ]
2009-10-29 13:36
dengjun000
Rank: 2
等 级:论坛游民
帖 子:66
专家分:77
注 册:2009-10-14
收藏
得分:0 
#include <stdio.h>
 
main()
{
  int sum=0,i,j;
  for(i=1;i<1001;i++)
  {
    for(j=1;j<i;j++)
    {
      if(i%j==0)
      sum+=j;
    }
    if(sum==i)
    {printf("%d",sum);
    getch();}
  }
}
为什么我的这个不行了。。汗啊。。
2009-10-29 13:53
dengjun000
Rank: 2
等 级:论坛游民
帖 子:66
专家分:77
注 册:2009-10-14
收藏
得分:0 
帮我看看哈 我还真不知道哪里错了。
2009-10-29 13:54
tony0708
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2009-4-21
收藏
得分:0 
回复 7楼 dengjun000
#include <stdio.h>
void main()
{
  int sum=0,i,j;
  for(i=1;i<1001;i++)
  {
    sum=0;
for(j=1;j<i;j++)
    {
      if(i%j==0)
      sum+=j;
    }
    if(sum==i)
    {printf("%d\n",sum);
    }
}
}

改动了几个地方:
1,main()改成void main(),我们书上都有void的,呵呵
2.去掉了getch,看不懂。
3.加了\n,这样结果方便显示。
4,最重要的地方,加一个sum=0;
因为你每次i循环结束,不加sum=0的话,后面结果就不对了,你想想,很容易理解的
2009-10-29 14:04
炎枫
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2011-4-20
收藏
得分:0 
这个用嵌套怎么做啊?我的这个不对,不知道怎么弄
#include "stdafx.h"

int main(int argc, char* argv[])
{ int i,j,s=0;
for(i=1;i<=200;i++)
{for(j=2;j<=i/2;j++){
if(i%j==0)
s=s+j;
if(s==i){
printf("%d=1",i);
for(j=2;j<=i/2;j++)
if(i%j==0)printf("+%d",j);
printf("\n");
}
s=1;}
return 0;}
求高手帮助啊
2011-04-20 20:03
快速回复:求完数,我觉得算法没问题,但就是死循环,不知哪里少了一步,谢谢各位 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016581 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved