主题:[讨论]帮忙修改下
简单的传说
[专家分:0] 发布于 2010-11-28 21:48:00
若a,b为亲密数,则a的因子之和等于b,b的因子之和等于a,且a不等于b,例如220和284就是一对亲密数,通过编程输出6~5000内的所有亲密数。
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a,b=0,i,k,l=0;
for(a=6;a<=5000;a++)
{
k=a;
for(i=1;i<=k-1;i++)
{
if(k%i==0)
b=b+i;
}
for(i=1;i<=b-1;i++)
{
if(b%i==0)
l=l+i;
}
if(l==a)
printf("%-10d%-10d\n",a,b);
b=0;
l=0;
}
return 0;
}
但是会输出这样的
220 284
后面又会有
284 220
我想把这样的去掉只要一组
回复列表 (共3个回复)
沙发
cfj469933485 [专家分:950] 发布于 2010-11-28 22:48:00
现在要熄灯了。明天帮楼主解决。
板凳
cfj469933485 [专家分:950] 发布于 2010-11-29 08:14:00
//若a,b为亲密数,则a的因子之和等于b,b的因子之和等于a,且a不等于b,
//例如220和284就是一对亲密数,通过编程输出6~5000内的所有亲密数。
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a, b = 0, i, k, l = 0;
for(a = 6; a <= 5000; a ++)
{
k = a;
for(i = 1; i <= k - 1; i ++)
{
if(k % i == 0)
b = b + i;
}
for(i = 1; i <= b - 1 && a <= b; i ++)//楼主请看应该明白什么意思吧。
{
if(b % i == 0)
l = l + i;
}
if(l == a)
printf("%-10d%-10d\n", a, b);
b = 0;
l = 0;
}
return 0;
}
3 楼
cfj469933485 [专家分:950] 发布于 2010-11-29 08:40:00
我把楼主的代码复制到VC6.0环境下运行,输出答案为:
6 6
28 28
220 284
284 220
496 496
1184 1210
1210 1184
2620 2924
2924 2620
我题目也没仔细看,以为楼主只是想把重复的只输一遍,所以提供了以上代码,后来题目一看,有点吓到了,a!=b,那6 6 ,28 28那二组不应该输出啊。
//若a,b为亲密数,则a的因子之和等于b,b的因子之和等于a,且a不等于b,
//例如220和284就是一对亲密数,通过编程输出6~5000内的所有亲密数。
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a, b = 0, i, k, l = 0;
for(a = 6; a <= 5000; a ++)
{
k = a;
for(i = 1; i <= k - 1; i ++)
{
if(k % i == 0)
b = b + i;
}
for(i = 1; i <= b - 1 && a < b; i ++)//不要等号,改为a < b
{
if(b % i == 0)
l = l + i;
}
if(l == a)
printf("%-10d%-10d\n", a, b);
b = 0;
l = 0;
}
return 0;
}
我来回复