wsx666946 发表于 2022-6-5 17:10:32

各位c语言大神进来看看!

以下是求3000以内亲密数的代码,第一个代码无法运行,第二个代码可以正常编译,他俩的区别就在于第一个是在for循环外面赋值的,按常理来说不是应该在for循环外面赋值更好么?为啥反而编译不了了??{:5_104:}
#include<stdio.h>
int main()
{
        int a,i,b=0,n=0;
        printf("下面是3000以内的亲密数:\n");
        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);
                }
        }

***************************
#include<stdio.h>
int main()
{
        int a,i,b,n;
        printf("下面是3000以内的亲密数:\n");
        for(a=1;a<=3000;a++)
        {       
                for(b=0,i=1;i<=a/2;i++)
                if((a%i==0))
                        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);
                }
        }

风车呼呼呼 发表于 2022-6-5 17:10:33

因为最外层循环,也就是对每一个 a 进行计算时,都需要重置 b 和 n 为0。内层for循环要是只运行一次,那可以放到外面赋值,但是外面套了一层循环,运行不止一次,当然每次就需要重置一下 b 、 n

wsx666946 发表于 2022-6-5 17:22:57

{:10_266:}{:10_266:}{:10_266:}{:10_266:}

傻眼貓咪 发表于 2022-6-5 17:49:44

第一个代码
b = 0 只执行一次(在外面执行),所以 b 值会随着循环越变越大

第二个代码
b = 0 执行至少 3000 次,每次 a 循环,b 又变回 0

jhq999 发表于 2022-6-5 19:26:48

本帖最后由 jhq999 于 2022-6-5 19:35 编辑

楼上已经回答了你的代码我给你优化一下#include<stdio.h>
int main()
{
      int a,i,b,n,m;
      printf("下面是3000以内的亲密数:\n");
      for(a=1;a<=300000;a++)
      {
            m=a/2;
                for(b=0,i=1;i<m;i++)
                {
                  m=a/i;
                  if((a%i==0))b+=i+m;

                }
                  b-=a;
                  m=b/2;
                for(n=0,i=1;i<m;i++)
                {
                  m=b/i;
                  if(!(b%i))n+=i+m;
                }

                  n-=b;
                if(n==a &&a <b)
                  printf(" %4d %4d   ",a,b);
                }
      }
页: [1]
查看完整版本: 各位c语言大神进来看看!