1. 程式人生 > >牛客網 完數VS盈數

牛客網 完數VS盈數

front int main pid () sta sub cst for

題目鏈接: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 }

牛客網 完數VS盈數