| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 873 人关注过本帖
标题:帮忙改进下一道习题
只看楼主 加入收藏
xiepanqi
Rank: 2
等 级:论坛游民
帖 子:43
专家分:55
注 册:2009-10-24
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:13 
帮忙改进下一道习题
题目如下:
一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如,6的因子为1,2,3,而6=1+2+3,因此6是“完数”。编程序找出1000之内的所有完数,并按下面格式输出其因子:
6 its factors are 1,2,3
我编了一个
程序代码:
#include "stdio.h"
void main()
{
    int a,i,j;
    for(i=1;i<=1000;i++)
    {
        for(j=1,a=0;j<i;j++)
        {
            if(i%j==0)a=a+j;
        }
        if(a==i)
        {
            printf("%d its factors are ",i);
            for(j=1;j<i;j++)
            {
                if(i%j==0)printf("%d,",j);
            }
            printf("\b\n");
        }
    }
    
}
答案是出来了,但是我感觉运算重复了
望大家指点下,改进下
谢谢
搜索更多相关主题的帖子: 习题 改进 
2009-11-11 12:27
pgy
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:C
等 级:小飞侠
威 望:8
帖 子:1248
专家分:2329
注 册:2009-9-23
收藏
得分:1 
清晰,不改

我可好玩啦...不信你玩玩^_^
2009-11-11 12:33
lijm1989
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:珠海
等 级:贵宾
威 望:12
帖 子:675
专家分:2844
注 册:2009-10-14
收藏
得分:0 
想效率的话,循环判断因子的时候用开方就行了,个人觉得可以用数组储存起来··下面就不用再重复了··
2009-11-11 12:41
xiepanqi
Rank: 2
等 级:论坛游民
帖 子:43
专家分:55
注 册:2009-10-24
收藏
得分:0 
回复 3楼 lijm1989
循环判断因子的时候用开方不行的
就拿6来说
6开方大概是2.4左右
而6的因子是1,2,3
2009-11-11 12:45
pgy
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:C
等 级:小飞侠
威 望:8
帖 子:1248
专家分:2329
注 册:2009-9-23
收藏
得分:1 
回复 3楼 lijm1989
质因子,因子

我可好玩啦...不信你玩玩^_^
2009-11-11 13:04
UserYuH
Rank: 12Rank: 12Rank: 12
来 自:毅华
等 级:火箭侠
威 望:8
帖 子:720
专家分:3300
注 册:2009-8-10
收藏
得分:1 
开方的可以:
程序代码:
#include <stdio.h>
#include <math.h>

int main(void)
{
   int i,j,n,m,s;
   for(i=2;i<1000;i++)
     {
      s=1,m=i;
      for(j=2;j<=sqrt(m);j++)
        {
         if(i%j==0)
          {
           s+=j;
           if(j!=i/j)s+=i/j;
          }
        }
      if(s==i)printf("%d ",i); 
     } 
   printf("\n"); 
   return 0; 
} 

努力—前进—变老—退休—入土
2009-11-11 13:31
lijm1989
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:珠海
等 级:贵宾
威 望:12
帖 子:675
专家分:2844
注 册:2009-10-14
收藏
得分:2 
我还是说···够了··不用循环那么多···
    6开方2.4,前面有因子 1和2,后面加上 6 / 2 = 3;
其它数也一样,
    12 开方3.几,前面有因子 1、2、3;  后面加上 12/3 =4;  12/2=6;
时间复杂度改变了,数大点的时候优势就出现了···
2009-11-11 13:31
lijm1989
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:珠海
等 级:贵宾
威 望:12
帖 子:675
专家分:2844
注 册:2009-10-14
收藏
得分:0 
汗···迟了··8秒··
2009-11-11 13:32
xiepanqi
Rank: 2
等 级:论坛游民
帖 子:43
专家分:55
注 册:2009-10-24
收藏
得分:0 
回复 6楼 UserYuH
要以6 its factors are 1,2,3的格式表达
2009-11-11 13:40
UserYuH
Rank: 12Rank: 12Rank: 12
来 自:毅华
等 级:火箭侠
威 望:8
帖 子:720
专家分:3300
注 册:2009-8-10
收藏
得分:0 
你是说输出结果又重复算,是说这个重复吗,完数1000内就三个,多算3次没什么吧?要挑关键的学。
下面这个是'代码'没重复,但还是要重复算来输出因子。
程序代码:
#include <stdio.h>
int main(void)
{
   int i,j,m,s,flag=1;
   for(i=2;i<1000;i++)
     {
      s=0,m=i;
      for(j=1;j<=m/2;j++)
        {
         if(i%j==0)
          {
           s+=j;
           if(!flag) printf("%d ",j);
          } 
        }
      if(!flag) printf("\n");
      if(s==i && flag)
        { printf("%d its factors are ",i--);
          flag=0;
        }
      else flag=1;
     } 
   printf("\n"); 
   return 0; 
}

努力—前进—变老—退休—入土
2009-11-11 14:28
快速回复:帮忙改进下一道习题
数据加载中...
 
   



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

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