windmh 发表于 2008-6-15 15:21

求助:求亲密数对问题

//求1000以内的亲密数对,亲密数对的定义为:若正整数A的所有因子(不包括A)之和
//为B,B的所有因子(不包括B)之和为A,且A!=B,则称A与B为亲密数对。
//如:220的因子之和 1+2+4+....+110=284
//    284的因子之和 1+2+....+142=220
#include "stdafx.h"
#include "iostream.h"
void main()
{
        int x,y;
        int i,j;
        int sum1=0,sum2=0;
        for(x=1;x<=1000;x++)
        {
                for(i=1;i<x;i++)
                {
                        if(x%i==0)
                                sum1+=i;
                }
                        for(y=1;y<=1000;y++)
                        {
                                for(j=1;j<y;j++)
                                {
                                 if(y%j==0)
                                         sum2+=j;
                                }
                                if(x==sum2 && y==sum1 && x!=y)
                                        cout<<x<<"和"<<y<<"是亲密对数"<<endl;
                        }
        }
}

请问错在哪了?

weiwieiweiwei 发表于 2008-7-16 18:01

我来看看那

错的多了去了
首先 你应该定义一个sum【1000】作为数组,不然你的sum1只能存放一个数,那就是1000的所有因子之和,一定不行,所以就错了!
把sum1和sum2 都改了,
在看看
估计应该行,我是这么向的

hitxinyu 发表于 2008-7-17 21:22

循环时应该每次都初始化sum1,sum2

#include "stdafx.h"
#include "iostream.h"
void main()
{
    int x,y;
    int i,j;
    int sum1=0,sum2=0;
    for(x=1;x<=1000;x++)
    {
        sum1 = 0;
        for(i=1;i<x;i++)
        {
            if(x%i==0)
                sum1+=i;
        }
            for(y=1;y<=1000;y++)
            {
                sum2 = 0;
                for(j=1;j<y;j++)
                {
                     if(y%j==0)
                         sum2+=j;
                }
                if(x==sum2 && y==sum1 && x!=y)
                    cout<<x<<"和"<<y<<"是亲密对数"<<endl;
            }
    }
}

jacksonchina 发表于 2008-7-26 13:45

LZ牛人哦

页: [1]

编程论坛