16 条题解
-
17
今天这一道题是函数问题,主要考察的是完全数如何来求
- 首先从 n ~ m 每一个数都遍历一次(包括 n和m)
- 紧接着可以遍历从 1 开始,到 n - 1 的所有数(因为完全数的约数和不包括本身)
- 紧接着就是判断能否将 i(外循环变量)整除 j (内循环变量)
- 如果能整除就将总数 sum 加上这个约数
- 此外,要记得每一次执行完了以后都要将 sum 归零哦~
OK,上代码吧~(AC通过)
#include <bits/stdc++.h> using namespace std; int main() { int n, m; cin >> n >> m; for (int i = n; i <= m; i++) { int sum = 0; for (int j = 1; j <= i - 1; j++) { if (i % j == 0) sum += j; } if (sum == i) cout << i << " "; } return 0; }
-
5
-
先定义一个完全数(完美数)函数
-
从 n ~ m 每一个数都遍历一次(包括 n和m)
-
紧接着可以遍历从 1 开始,到 n - 1 的所有数(因为完全数的约数和不包括本身)
-
如果能整除就输出i
此外,要记得每一次执行完了以后都要输出空格哦~
AC过
吗,请放心食用#include <iostream> using namespace std; bool check(int x) { int m=0; bool n=false; for (int i=1;i<x;i++) { if (x%i==0) { m+=i; } } if (x==m) { n=true; } return n; } int main() { int x, y; cin>>x>>y; for (int i=x;i<=y;i++) { if (check(i)) { cout<<i<<' '; } } return 0; }
-
-
3
写函数,不迷路!
#include <iostream> using namespace std; int perfect(int x) { int sum = 0; for (int i = 1; i <= x - 1; i++) { if (x % i == 0) { sum += i; } } if (sum == x) { return true; } else { return false; } } int main() { int m, n; cin >> m >> n; for (int i = m; i <= n; i++) { if (perfect(i)) { cout << i << " "; } } return 0; }
-
3
要输出m和n范围内的完美数,用for循环从m到n进行遍历,每个数去判断它是否是完美数,如果是完美数,就输出,不是,就跳过。
for(int i=m;i<=n;i++) { //判断该数是否为完美数,若是,则输出;不是,则继续循环 }
接下来重点是要判断完美数。
一个数所有真约数的和正好等于这个数,通常把这个数叫做完美数。
那我们主要就判断一下这个数的真约数有哪些,把真约数累加起来就是约数和,约数和如果等于该数,则为完美数。
遍历1~i-1范围内的数,看i对当前数取余是否为0,若为0,则为真约数,累加到约数和中即可,不遍历到n是因为完全数不包括自身这个约数。
int sum = 0; //sum用来存放该数的约数和 for (int j = 1; j < i ; j++) //遍历1~i-1范围内的数,不遍历到n是因为完全数不包括自身这个约数 { if (i % j == 0) //如果当前数i对j取余等于0,表示该数是i的一个约数 { sum += j; } } if (sum == i) //循环结束后,如果sum和i相等,则该数为完美数,输出 { cout << i << " "; }
-
0
时间复杂度偏高,但在题目数值内绰绰有余。
#include<bits/stdc++.h> using namespace std; int main() { int n , m ,sum; cin>>m>>n; for(int j = m ; j <= n ; j++) { sum = 0; for(int i = 1 ; i < j ; i++) { if(j % i == 0) { sum += i; } } if(sum == j) { cout<<j<<" "; } } }
套两层循环,只要是j的因数就加到sum里去,最后判断j与sum是否相等即可
-
0
#include <iostream>//hetao3097453 using namespace std; bool wanmei(int n) { int num = 0; for(int i = 1;i <= n;i++) { if(n % i == 0) { num += i; } } num -= n; if(num == n) { return true; } else { return false; } } int main() { int n,m; cin >> n >> m; for(int i = n;i <= m;i++) { if(wanmei(i)) { cout << i << " "; } } cout << endl; return 0; }
- 1
信息
- ID
- 136
- 时间
- 1000ms
- 内存
- 16MiB
- 难度
- 3
- 标签
- 递交数
- 1608
- 已通过
- 838
- 上传者