| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2213 人关注过本帖
标题:各位大神帮我看看我程序哪错了?检查了半天没检查出来。。
只看楼主 加入收藏
风雨晨曦
Rank: 1
等 级:新手上路
帖 子:33
专家分:0
注 册:2017-12-5
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:11 
各位大神帮我看看我程序哪错了?检查了半天没检查出来。。
题目是:一个数如果恰好等于他的因子之和,该数就被称为完数,例如:6的因子有1,2,3,6=1+2+3,所以6是完数。编写程序找出1000以内的完数,并按每行5歌进行输出。
代码如下:
#include <stdio.h>
int main (){
    int i,j,count=0,sum=0;
    for(i=1;i<=1000;i++){
        for(j=1;j<i;j++){
            if(i%j==0){
                sum+=j;
                if(sum==i){
                   count++;
                   if(count%5==0){
                      printf("%d \n",i);
                   }
                   else{
                      printf("%d ",i);
                   }
                }
            }
        }
    }
}
搜索更多相关主题的帖子: 检查 完数 int count sum 
2017-12-19 16:31
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10527
专家分:42899
注 册:2014-5-20
收藏
得分:5 
#include <stdio.h>
main()
{
    int i, j, m, n=10000;
    char s[2048];
    for (i=2; i<=n; i++)
    {
        sprintf(s, "1");
        for(j=2,m=1; j<i; j++)
        {
            if ((i%j) == 0)
            {
                sprintf(s, "%s + %d", s, j);
                m += j;
            }
        }
        if (i == m)
            printf(" %d = %s 完数\n", i,s);
            /*
        else if (i < m)
            printf(" %d < %s 盈数\n", i,s);
        else
            printf(" %d > %s 亏数\n", i,s);
            */
    }
}
2017-12-19 16:45
grmmylbs
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:54
帖 子:1409
专家分:5845
注 册:2016-2-14
收藏
得分:10 
sum没清零
    for (i = 1; i <= 1000; i++) {
        sum = 0;
2017-12-19 16:46
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:5 
1000内的所有完数,其实就那么几个~

最近思考这个突然有一种另外实现的算法~
感觉可以用埃拉特斯特尼筛法遍历数组

每个数字都可以用栈来储存该数字的所有因子~
这个感觉算法复杂度和时间复杂度都是适中的~
1000的话保留所有因子空间还是够用的~

时间复杂度和埃拉特斯特尼筛法的是一样的,都是O(n loglog n);
当然用两层循环最简单遍历也可以,不过感觉形式不至于楼主那个样子吧
这样找bug别人感觉重新写更加容易
~

[此贴子已经被作者于2017-12-19 16:50编辑过]


[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-12-19 16:48
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
回复 3楼 grmmylbs
对哦,细看代码就是这个问题~感觉到底还是楼主的排版影响了整体风格~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-12-19 16:55
风雨晨曦
Rank: 1
等 级:新手上路
帖 子:33
专家分:0
注 册:2017-12-5
收藏
得分:0 
回复 3楼 grmmylbs
我之前已经令sum等于0了啊
2017-12-19 18:09
风雨晨曦
Rank: 1
等 级:新手上路
帖 子:33
专家分:0
注 册:2017-12-5
收藏
得分:0 
回复 5楼 九转星河
哈哈哈,我们老师要我们养成这种习惯
2017-12-19 18:11
风雨晨曦
Rank: 1
等 级:新手上路
帖 子:33
专家分:0
注 册:2017-12-5
收藏
得分:0 
回复 4楼 九转星河
是6,24,28,496吗
2017-12-19 18:13
风雨晨曦
Rank: 1
等 级:新手上路
帖 子:33
专家分:0
注 册:2017-12-5
收藏
得分:0 
回复 3楼 grmmylbs
我发现按你说的做了后确实能有结果了,可是有一个结果应该是错的,24不是完数,1000以内的完数应该只有6,28,496吧,我也清楚问题在哪了
2017-12-19 18:28
风雨晨曦
Rank: 1
等 级:新手上路
帖 子:33
专家分:0
注 册:2017-12-5
收藏
得分:0 
回复 2楼 吹水佬
谢谢了,不过看不懂但是你提供给我的结果是对的
2017-12-19 18:30
快速回复:各位大神帮我看看我程序哪错了?检查了半天没检查出来。。
数据加载中...
 
   



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

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