这个代码运行来无结果。。。
#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)
24行代码 改为了: b%j==0;
if(s1==b&&s2==a)这个判断中的break改为continue,不然只要找到一组就会退出循环,continue会找完所有合适的数