c语言麻烦大家看看这个代码有啥问题~~

这个代码运行来无结果。。。

 #include
 int main()
 {
 int a,b,s1=0,s2=0;
 for(a=1;a<=3000;a++)
 for(b=a+1;b<=3000;b++)
 {
 for(int i=1;i<a;i++)
 if(a%i==0)s1+=i;
 for(int j=1;j<b;j++)
 if(a%j==0)s2+=j;
 if(s1==b&&s2==a) 
 {
 printf("%d...%d\n",a,b);
 break;
 }
 s1=0;s2=0;
 }
 }

如果整数a的全部因子(包括1,不包括a本身)之和等于b;
且整数b的全部因子(包括1,不包括b本身)之和等于a,则将整数a和整数b称为亲密数。求3000以内的全部亲密数。

 #include <stdio.h>
int main()
{
    int a,b,s1=0,s2=0;
    for(a=1;a<=3000;a++)
        for(b=a+1;b<=3000;b++)
        {
            s1=0;s2=0; //修改
            for(int i=1;i<a;i++)
                if(a%i==0)s1+=i;
            for(int j=1;j<b;j++)
                if(b%j==0)s2+=j;//修改
            if(s1==b&&s2==a) 
            {
                printf("%d...%d\n",a,b);
                //break;
            }
        }
}

我是菜鸟一枚··但乍看了一下··你把每个for的大括号都加上试试?

不是说不包括1和它本身吗?那你的循环条件还那么设置。
另外,这样的亲密数都有哪些,你按照程序的逻辑一步一步思考,推一推循环到亲密数会发生什么情况,为啥会那样?
我个人感觉就是你代码风格有重大问题,题目也有问题。。。

我看你这个是没有解。因为我拿你的代码测试了一下s2=b,就只有一组解,a=1,b=2;图片说明

刚才没有看见你下面的问题,还在想你这个代码是解决什么问题。明显你代码写错了,下面是(b%j==0)

图片说明

![图片说明](https://img-ask.csdn.net/upload/201512/04/1449237052_497711.png)图片说明

24行代码 改为了: b%j==0;
if(s1==b&&s2==a)这个判断中的break改为continue,不然只要找到一组就会退出循环,continue会找完所有合适的数