| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 13082 人关注过本帖
标题:求1到1000以内的完数
只看楼主 加入收藏
核晴核理
Rank: 3Rank: 3
来 自:北京
等 级:论坛游侠
帖 子:129
专家分:169
注 册:2012-6-14
结帖率:84.21%
收藏
已结贴  问题点数:20 回复次数:17 
求1到1000以内的完数
想用子函数来求质因数,然后主函数完成1到1000的循环判断,程序如下,可是运行不出结果,应该是子函数中k=a/2有问题,局部变量没有设初值,按照我这个思路应该怎么改才能正确运行呢?
#include<stdio.h>
int zys(int a)
{
    int s=0,x,k,i=0;
    static int b[20];
    k=a/2;
    for(x=1;x<=k;x++)
        if(a%x==0)
        {
            b[i]=x;
            i++;
        }
    for(x=0;x<i-1;x++)
        s=b[x]+b[x+1];
    return s;
}
main()
{
    int d;
    printf("1到1000以内完数为:");
    for(d=1;d<=1000;d++)
        if(d==zys(d))
            printf("%d ",d);
}
搜索更多相关主题的帖子: include return 质因数 
2012-08-22 16:26
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:0 
逻辑挺乱的,找整除k应该是a的平方根,另外对数组b求和也不对

总有那身价贱的人给作业贴回复完整的代码
2012-08-22 17:05
姻脂梦
Rank: 6Rank: 6
等 级:侠之大者
帖 子:264
专家分:424
注 册:2012-7-3
收藏
得分:0 
漏掉一对花括号?
2012-08-22 19:28
核晴核理
Rank: 3Rank: 3
来 自:北京
等 级:论坛游侠
帖 子:129
专家分:169
注 册:2012-6-14
收藏
得分:0 
回复 2楼 embed_xuel
逻辑确实比较乱,呵呵,子函数的变量定义的没有特点,变量用途不好区分,如果要是您写这个程序会怎么写呢?
2012-08-22 19:42
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:20 
回复 楼主 核晴核理
完全数是真因子加起来等于自己的数吗?

按你的思路,这样就行了,要不了那么多变量:
程序代码:
#include<stdio.h>

int zys(int a)
{
    int s=0, x;

    for(x=1;x<=a/2;x++)
        if(a%x==0) s += x;

    return s;
}

int main()
{
    int d;
    printf("1到1000以内完数为:");
    for(d=1;d<=1000;d++)
        if(d==zys(d)) printf("%d ",d);

    return 0;
}



[ 本帖最后由 pangding 于 2012-8-22 22:46 编辑 ]
2012-08-22 22:35
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
以下是引用embed_xuel在2012-8-22 17:05:21的发言:

逻辑挺乱的,找整除k应该是a的平方根,另外对数组b求和也不对

求 a 的平方根应该是不对的,因为像 28 这样的数,14 也是它的一个真因子。但大于它的平方根。
2012-08-22 22:44
wind7866
Rank: 1
等 级:新手上路
帖 子:6
专家分:5
注 册:2012-8-3
收藏
得分:0 
额,把我的贴上来LZ看看?

程序代码:
#include<stdio.h>
main(){
       int i,n,m;
       m=0;
       for(i=1;i<=1000;i++){                                                                                    
             for(;n<i;n++){
                              if(i%n==0)
                              m=n+m;               
                   }
             n=1;
             if(i==m) 
             printf("%d  ",m);
             m=0;
             }
             system("pause");
       }

 

2012-08-22 23:09
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
回复 6楼 pangding
到平方根没问题。当你找到n一个因子a,自然也找到了另一个因子n/a。
收到的鲜花
  • pangding2012-08-23 21:29 送鲜花  5朵   附言:有道理。

重剑无锋,大巧不工
2012-08-22 23:34
核晴核理
Rank: 3Rank: 3
来 自:北京
等 级:论坛游侠
帖 子:129
专家分:169
注 册:2012-6-14
收藏
得分:0 
回复 5楼 pangding
谢谢斑竹,简洁明了,我顿悟了
2012-08-23 16:10
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:0 
看来不贴代码一分都没有啊

总有那身价贱的人给作业贴回复完整的代码
2012-08-23 18:26
快速回复:求1到1000以内的完数
数据加载中...
 
   



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

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