牛客網 完數VS盈數
阿新 • • 發佈:2019-04-12
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) return2; 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盈數