完数VS盈数(清华复试上机)

前言:

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;
}

猜你喜欢

转载自blog.csdn.net/weixin_44897291/article/details/112967086