牛客网 完数VS盈数

题目链接:https://www.nowcoder.com/practice/ccc3d1e78014486fb7eed3c50e05c99d?tpId=40&tqId=21351&tPage=1&rp=1&ru=/ta/kaoyan&qru=/ta/kaoyan/question-ranking

题目描述

一个数如果恰好等于它的各因子(该数本身除外)子和,如:6=3+2+1。则称其为“完数”;若因子之和大于该数,则称其为“盈数”。 求出2到60之间所有“完数”和“盈数”。

输入描述:

题目没有任何输入。

输出描述:

输出2到60之间所有“完数”和“盈数”,并以如下形式输出:
E: e1 e2 e3 ......(ei为完数)
G: g1 g2 g3 ......(gi为盈数)
其中两个数之间要有空格,行尾不加空格。

*判断是否满足条件 满足条件则存入队列
 1 #include <iostream>
 2 #include <algorithm>
 3 #include <string>
 4 #include <cstring>
 5 #include <stack>
 6 #include <cstdio>
 7 #include <queue>
 8 #include <vector>
 9 using namespace std;
10 int deal(int x)
11 {
12     int sum=0;
13     for(int i=1;i<x;i++){
14         if(x%i==0){
15             sum+=i;
16         }
17     }
18     if(sum==x) return 1;
19     else if(sum>x) return 2;
20     else return 0;
21 }
22 int main()
23 {
24     queue<int> q1,q2;
25     for(int i=2;i<=60;i++){
26         if(deal(i)==1) q1.push(i);
27         else if(deal(i)==2) q2.push(i);
28     }
29     cout<<"E:";
30     while(q1.size()>0){
31         cout<<" "<<q1.front();
32         q1.pop();
33     }
34     cout<<endl;
35     cout<<"G:";
36     while(q2.size()>0){
37         cout<<" "<<q2.front();
38         q2.pop();
39     }
40     return 0;
41 }
原文地址:https://www.cnblogs.com/wydxry/p/10695579.html