Get_gift 2024-11-19 20:57 采纳率: 100%
浏览 9
已结题

求3000以内的亲密数

#求问大神们为什么得在for循环里面初始化值,而在for循环之外初始化值最后打印结果打印不出来
第一个是问题代码:

#include<stdio.h>

int main()
{
    int  Y, X, i, Ysum;
    Y = X = i = Ysum = 0;
    for (X = 1; X <= 3000; X++)
    {//枚举3000以内所有数字
        for (i = 1; i < X; i++)
        {//循环寻找每个整数的因子
            if (X % i == 0) //如果可以整除那就是因子,按照题目因子和为Y
                Y += i;
        }
        for (i = 1; i < Y; i++)//循环寻找Y的全部因子 
        {
            if (Y % i == 0)
                Ysum += i;
        }
        if (Ysum == X && X < Y)
            printf("%d的亲密数是%d\n", X, Y);
    }
    return 0;
}


运行结果:

img

修改之后的正确代码:

#include<stdio.h>

int main() 
{
    int  Y,X, i,Ysum;
    for (X = 1; X <= 3000; X++) 
    {//枚举3000以内所有数字
        Y = 0;
        for (i = 1; i < X; i++)
        {//循环寻找每个整数的因子
            if (X % i == 0) //如果可以整除那就是因子,按照题目因子和为Y
                Y += i;
        }
        Ysum = 0;
        for (i = 1; i < Y;i++)//循环寻找Y的全部因子 
        {
            if (Y % i == 0) 
                Ysum += i;
        }
        if (Ysum==X&&X<Y) 
            printf("%d的亲密数是%d\n", X, Y);
    }
    return 0;
}

运行结果:

img

  • 写回答

1条回答 默认 最新

  • 关注

    以下回复参考:皆我百晓生券券喵儿等免费微信小程序作答:

    首先,关于为什么在第二个代码段中需要将 Ysum 的初始化放在 for 循环内部而不是外部的问题,原因如下:在第二个代码段中,如果将 Ysum 的初始化放在 for 循环外部,那么在整个程序运行过程中,Ysum 只会被初始化一次,即在程序开始时。如果在循环内部不重新初始化 Ysum,那么每次循环都会基于上一次循环的结果继续累加,而不是重新开始计算每个数的亲密数。因此,在寻找每个数的亲密数时,我们需要重新初始化 Ysum。这样我们才能确保每次循环都是基于当前数 X 的因子 Y 来计算其亲密数。所以正确的方式是在每次循环开始时重新初始化 Ysum。关于为什么修改后的代码可以正常工作而原始代码无法正常工作的原因:原始代码中,变量 Ysumfor 循环外被初始化一次,然后在循环内部使用。由于没有在每次循环开始时重新初始化 Ysum,因此它将继续累加之前的值,导致结果不正确。修改后的代码在每次循环开始时重新初始化了 Ysum,因此能够正确地计算每个数的亲密数。至于运行结果只显示部分亲密数对的原因,可能是由于程序在打印结果后立即结束,没有足够的时间显示所有结果。当打印的结果太多时,可能只会显示部分结果。如果你想显示所有结果,可以尝试将程序修改为在打印结果后稍作延迟,或者将结果保存到文件中,然后查看文件以获取所有结果。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 12月4日
  • 已采纳回答 11月26日
  • 修改了问题 11月19日
  • 创建了问题 11月19日