前言:
21考研,不论能否进复试记录一下准备路上写下的垃圾代码。本来啃《算法笔记》,但是感觉太多了做不完,改做王道机试指南。
题目描述:
一个数如果恰好等于它的各因子(该数本身除外)子和,如:6=3+2+1。则称其为“完数”;若因子之和大于该数,则称其为“盈数”。 求出2到60之间所有“完数”和“盈数”。
输入描述
题目没有任何输入。
输出描述:
输出2到60之间所有“完数”和“盈数”,并以如下形式输出:
E: e1 e2 e3 …(ei为完数)
G: g1 g2 g3 …(gi为盈数)
其中两个数之间要有空格,行尾不加空格。
解答
#include<iostream>
#include<string>
#include<vector>
using namespace std;
int main() {
vector<int> E;
vector<int> G;
vector<int> factor;
for (int i = 2; i <= 60; i++) {
int temp=0;
for (int j = 1; j <= i / 2; j++) //寻找因数
if (i % j == 0)
factor.push_back(j);
for (int j = 0; j < factor.size(); j++) //计算因数和
temp += factor[j];
if (temp == i)
E.push_back(i);
else if (temp > i)
G.push_back(i);
factor.clear();
}
cout << "E: ";
for (int i = 0; i < E.size(); i++)
if (i < E.size() - 1)
cout << E[i] << ' ';
else
cout << E[i] << endl;
cout << "G: ";
for (int i = 0; i < G.size(); i++)
if (i < G.size() - 1)
cout << G[i] << ' ';
else
cout << G[i] << endl;
return 0;
}