先上代码

  1. ​#include <bits/stdc++.h>
  2. using namespace std;
  3. int main()
  4. {
  5. int temp[100], index = 0;
  6. int n;
  7. cin >> n;
  8. if (n<6 )//从样例得出前六无“完数”
  9. return 0;
  10. for (int i = 6; i <=n;++i)
  11. {
  12. index = 0;
  13. for (int j=1;j<i;++j)
  14. {
  15. if(i%j==0)
  16. temp[index++] = j;//记录因子
  17. }
  18. //记录下所有因子
  19. //计算因子的和
  20. int tmp_result = 0;
  21. for (int p = 0; p < index;++p)
  22. {
  23. tmp_result += temp[p];
  24. }
  25. if(tmp_result==i ) {//因子和和数本身相等,满足“完数”定义
  26. printf("%d its factors are ", i);
  27. for (int q = 0; q < index;++q)
  28. {
  29. printf("%d ", temp[q]);
  30. }
  31. printf("\n");
  32. }
  33. }
  34. return 0;
  35. }

首先从样例可得0-5无完数,可直接先判断n.
然后接下来就是使用循环嵌套进行判断,最外层对数进行遍历,在内层循环中,再次遍历,寻找因子。后续再根据定义进行检验注意:在这里遍历因子时,上限是n-1(n为要检查的数)

  1. 确定要检查的数
    2.循环遍历出该数的因子,用数组存储
    3.判断因子之和和该数是否相等(定义)
    4.输出结果(若3为true)

    感觉比较容易踩坑就是第二步的遍历范围,要小于要查找的数,不然的话因子数组会多一位。

点赞(0)
 

9.9 分

1 人评分

 

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 1 条评论

3120000903 4年前 回复TA
自己在这个网站写的第一篇题解!纪念一下啦啦啦啦啦