共计 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 即可。
代码就先不给出了,慢慢写吧。
正文完