一点代码更改+纠错

68次阅读
没有评论

共计 520 个字符,预计需要花费 2 分钟才能阅读完成。

#include <bits/stdc++.h>

using namespace std;

int main()
{
    int n,x,s=0,j;
    cin >> n;

    for(x=n; x >= 1; x--)
    {
//      j=x;
        for(j=1; j <= x / 2; j++)
        {
            if(x % j == 0)
            {
                s=s+j;
            }
            if(s == x)
            {
                cout<<x;
                break;
            }
        }
    }
    return 0;
}

有一个同学请教了我这个代码错在哪里,如果我没有猜错,这段代码的 原题链接

上面的代码是我 改过一点 的,原先这段代码甚至是RE

总之,我发现这个代码还是有问题,思路上的

原题是这样的:

一点代码更改 + 纠错
题目描述

打过 OI 的人都知道,写代码要先想思路

这道题的思路就非常显然了,枚举 1~n,判断每一个数是不是“完数”,如果是,就把答案更新为这个数,最后输出答案。

细分思路,如何判断是不是完数?定义一个布尔类型(flag),和一个整数类型(sum),每一次要判断一个数前 都初始化为 0 ,然后去 枚举这个数 真因数(1~n-1),若发现一个因数,就加到 sum 里 ,等到枚举结束, 再判断 sum 是否等于 i ,如果是,那么 i 就是“完数”,把一个定义在 外部 变量 ans 设置为 i 。当范围为 1~n 的枚举也结束了,输出 ans 即可。

代码就先不给出了,慢慢写吧。

正文完
 0
syh
版权声明:本站原创文章,由 syh 于2025-09-26发表,共计520字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)
本站总字数:7.2w