提问 关于for

iverstyle 2008-10-23 12:33:24
代码1:
#include<stdio.h>
void main()
{
int a,i,b=0,n=0;
for(a=1;a<3000;a++)
{
for(i=1;i<=a/2;i++)
if(!(a%i))b+=i;
for(i=1;i<=b/2;i++)
if(!(b%i))n+=i;
if(n==a&&a<b)
printf("%4d..%4d ",a,b);
}
}



代码2
#include<stdio.h>
int main()
{
int a,i,b,n;
for(a=1;a<3000;a++)
{
for(b=0,i=1;i<=a/2;i++)
if(!(a%i))b+=i;
for(n=0,i=1;i<=b/2;i++)
if(!(b%i))n+=i;
if(n==a&&a<b)
printf("%4d..%4d ",a,b);
}
}


针对 “如果整数A的全部因子(包括1,不包括A本身)之和等于B;且整数B的全部因子(包括1,不包括B本身)之和等于A,则将整数A和B称为亲密数。求3000以内的全部亲密数。”,为何代码1不能解决,而代码2则能很好的解决呢?

2个代码不同之处是一个在变量声明时就赋值了,一个是在for里面赋值的。
望高手给详细讲解下,谢谢!!
...全文
36 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
leank 2008-10-23
  • 打赏
  • 举报
回复
你仔细看看,在这个大循环for(a=1;a <3000;a++)下,对b和n是要赋值的,而第一个赋值以后是不会改回去的,第二个则每次进入循环都会对b、n重新赋值。
iverstyle 2008-10-23
  • 打赏
  • 举报
回复
奥~~懂咯~
baihacker 2008-10-23
  • 打赏
  • 举报
回复
for(i=1;i <=a/2;i++)
if(!(a%i))b+=i;

两段代码第一次运行到这里没有区别.

但是注意到,第二段代码会在这里的时候让b = 0;
而第一段代码的b还是原来的值.

所以就出错了.

在声明的时候赋值只有一次.在for里面的每次遇到都要赋值.
这就是不同的地方.

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧