鱼C论坛

 找回密码
 立即注册
查看: 1371|回复: 2

为什么这个代码在完数问题上错误

[复制链接]
发表于 2023-11-1 20:38:55 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include<stdio.h>
#include<math.h>
        int main(void)
        {  
          /*********Begin*********/
          int a,b,sum,n;
      a = 1;
      b = 2;
      sum = 0;
      scanf("%d",&n);
      for(a=1;a<n;a++){
      sum = 0;   
    for(b=2;b<a/2;b++){
        if(a%b==0){
            sum += b;
        }        
    }if(sum == a)
    printf("%d\n",sum);
      }
                
          /*********End**********/
       return 0;
        }
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-11-1 20:39:26 | 显示全部楼层
C/C++代码问题分析:

这段代码在寻找完数(Perfect Number)的过程中存在一些逻辑错误。

1. 在外层的for循环中,循环条件a<n导致在内层的for循环中,b的范围是从2到a/2-1,而不是从2到a/2。这样会导致sum没有正确地累加,进而影响后面的判断条件if(sum == a)

2. 在内层的for循环中,应该将循环条件改为b <= a/2,以保证b能够正确遍历到a的一半。

以下是修改后的代码:
#include <stdio.h>int main(void){    int a, b, sum, n;    a = 1;    b = 2;    sum = 0;    scanf("%d", &n);    for (a = 1; a < n; a++)    {        sum = 0;        for (b = 1; b <= a / 2; b++) // 修改内层循环条件        {            if (a % b == 0)            {                sum += b;            }        }        if (sum == a)        {            printf("%d\n", sum);        }    }    return 0;}
经过上述修改后,代码逻辑应该能够正确执行。希望对你有帮助。

球一个最佳答案谢谢啦!这对我非常重要!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-11-1 20:41:54 | 显示全部楼层
这段代码在完数问题上的错误是在计算完数时,判断因子的范围错误。

完数是指一个数等于它的所有因子(不包括它本身)之和。在这段代码中,使用了两个循环来计算完数。第一个循环用于遍历所有可能的完数,第二个循环用于计算每个可能完数的因子之和。

然而,在第二个循环中,判断因子的范围是错误的。应该判断 b<=a/2 ,而不是 b<a/2 。因为一个数的最大因子不会超过它的一半,所以应该将循环条件改为 b<=a/2 。

下面是修改后的代码:
#include <stdio.h>

int main(void) {
    int a, b, sum, n;
    a = 1;
    b = 2;
    sum = 0;
    scanf("%d", &n);
    for (a = 1; a < n; a++) {
        sum = 0;
        for (b = 2; b <= a / 2; b++) {
            if (a % b == 0) {
                sum += b;
            }
        }
        if (sum == a) {
            printf("%d\n", sum);
        }
    }
    return 0;
}

这样修改后的代码就能正确地计算并输出完数了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-5 15:28

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表