| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 781 人关注过本帖
标题:这个判断完数的程序哪里错了??为什么不显示?
只看楼主 加入收藏
_少爺鈊鈦亂
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2010-1-23
结帖率:0
收藏
已结贴  问题点数:10 回复次数:5 
这个判断完数的程序哪里错了??为什么不显示?
完数就是一个数的所有因子之和等于其本身,这个程序时输出2--n 之间的完数,n是由键盘读入一个数字
#include <stdio.h>
#include <stdlib.h>
#define N 50
main()
{
      int a,b,c,d,e;
      int n,f,g[N];
      int sum;
      sum=0;
      b=0;c=0;d=0;e=0;
      printf("请输入一个数字:");
      scanf("%d",&n);
      for(a=2;a<=n;a++)
      {
                       for(c=1;c<a;c++)
      
           {
                       if(a%c==0)
           g[d++]=c;}
      
   
         for (f=0;f<=d;f++)
         sum+=g[f];
         if(sum==a)
        {
                   printf("%-3d",a);
         e++;
         if(e%5==0)
         printf("\n");
         }
         
         }
        
        system("pause");
         }



搜索更多相关主题的帖子: 判断 
2010-01-23 22:19
ljt0000mf
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:104
专家分:157
注 册:2009-7-4
收藏
得分:2 
那个,b,你做什么用的?
2010-01-24 02:02
Alen0128
Rank: 4
等 级:业余侠客
帖 子:171
专家分:222
注 册:2009-12-26
收藏
得分:2 
先粘你的代码:

你的思路有问题,我用红字标出:
main()
{
      int a,b,c,d,e;
      int n,f,g[N];
      int sum;
      sum=0;
      b=0;c=0;d=0;e=0;

      printf("请输入一个数字:");
      scanf("%d",&n);

      for(a=2;a<=n;a++)                 
      {
                       for(c=1;c<a;c++)
      
           {
                       if(a%c==0)        //你这里的算法思路错了。我是菜鸟,解释不好,就在你程序后面粘上我的,你自己看看吧,呵呵
                         g[d++]=c;}         //g[d++]错了,[]里不能有变量表达式,最好为  {g[d]=c;d++};
                                             //最好,程序写的要规范,可读性要强
         for (f=0;f<=d;f++)
         sum+=g[f];
         if(sum==a)
        {
                   printf("%-3d",a);
         e++;
         if(e%5==0)
         printf("\n");
         }
         
         }
        
        system("pause");
         }


我的程序代码:
#include <stdio.h>
int main()
{
    int i = 0;
    int sum = 0;
    int factor = 0;                     
    int integer = 0;

    for (integer=2; integer<1001; integer++)
    {
        sum = 0;
        
        for (factor=1; factor<integer; factor++)
        {
            sum += factor;

            if (sum==integer)
            {
                i++;
                printf("%5d",integer);

                if (i%5==0)
                {
                    printf("\n");
                    break;
                }   
            }
        }
    }

    return 0;
}


-不想让你发现我 凌乱的脚步 ,我努力 跟上你的速度
2010-01-24 11:12
树上月
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:114
专家分:154
注 册:2010-1-6
收藏
得分:2 


#include<stdio.h>
int main(void)
{
    int i,j,s,n;
    printf("Enter n:");
    scanf("%d",&n);
    for(i=1;i<=n;i++){
            s=1;
        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");
            }
    }
   
    return 0;
}

每一个不曾起舞的日子,都是对未来的一种辜负......
2010-01-24 11:23
cnfarer
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:179
帖 子:3330
专家分:21157
注 册:2010-1-19
收藏
得分:2 
注意红色的地方是经修改或添加的(应该可以了,我试过,不过输入的数字不能太大,因为你的N太小):
void main()
{
    int a,b,c,d,e;
    int n,f,g[N];
    int sum;
    sum=0;
    b=0;c=0;d=0;e=0;
    printf("请输入一个数字:");
    scanf("%d",&n);
    for(a=2;a<=n;a++)
    {
        sum=0,d=0;
        for(c=1;c<a;c++)
        {
            if(a%c==0)
                g[d++]=c;
        }
        for (f=0;f < d;f++)
            sum+=g[f];
        if(sum==a)
        {
            printf("%-3d",a);
            e++;
            if(e%5==0)
                printf("\n");
        }

    }

    system("pause");
}

[ 本帖最后由 cnfarer 于 2010-1-25 19:35 编辑 ]

★★★★★为人民服务★★★★★
2010-01-25 14:49
doubleflygo
Rank: 2
等 级:论坛游民
帖 子:26
专家分:50
注 册:2010-1-22
收藏
得分:2 
//注意红色部分
#include <stdio.h>
#include <stdlib.h>
#define N 50
void main()
{
      int a,b,c,d,e;
      int n,f,g[N];
      int sum;
      sum=0;
      b=0;c=0;d=0;e=0;
      printf("请输入一个数字:");
      scanf("%d",&n);
      for(a=2;a<=n;a++)
      {
             for(c=1;c<a;c++)
      
             {
              if(a%c==0)
                g[d++]=c;
             }
             for (f=0;f<d;f++)//记的这时候的f能取得的最大值只能是d-1,因为由于g[d++]这个操作,此时只是将因子赋值于g[d],而不是
                              //g[d=d+1];
                sum+=g[f];
             d=0;//记的对于每个2~n之间的数的因子都要从数组一开始重新存储,否则之前的数的因子会影响求和的结果
             if(sum==a)
             {
             printf("%-3d",a);
             e++;
             if(e%5==0)
             printf("\n");
             }
            sum=0;//记的每个数的因子之和判断之后清零,否则影响后面的结果;
      }
        
        system("pause");
  }
2010-01-29 08:35
快速回复:这个判断完数的程序哪里错了??为什么不显示?
数据加载中...
 
   



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

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