首页 > 试题广场 >

完数VS盈数

[编程题]完数VS盈数
  • 热度指数:34421 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 64M,其他语言128M
  • 算法知识视频讲解
一个数如果恰好等于它的各因子(该数本身除外)子和,如:6=3+2+1。则称其为“完数”;若因子之和大于该数,则称其为“盈数”。 求出2到60之间所有“完数”和“盈数”。

输入描述:
题目没有任何输入。


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

输入

输出

按题目要求进行输出即可。
//JAVA版解答 希望能帮到带火

import java.util.Vector;

public class Main {
        
    public static void main(String[] args){
                //定义一个装int的向量
        Vector<Integer> factorVector = new Vector<Integer>();
        Vector<Integer> E = new Vector<Integer>();
        Vector<Integer> G = new Vector<Integer>();
        int sum=0;
        //遍历2-60所有数
        for (int i=2; i<=60; i++){
            //求各个数的因子并加入Vector中
            for (int j=1; j<i; j++)
                if ( i%j==0 )
                    factorVector.add(j);
            //求出该数所有因子之和 判断是否为"完数"或"盈数"
            for (int j=0; j<factorVector.size(); j++)
                sum += factorVector.get(j);
            if (sum == i)
                E.add(i);
            else if (sum > i)
                G.add(i);
            
            //将sum和因子向量清空
            sum = 0;
            factorVector.clear();
        }
        //集中输出
        System.out.print("E:");
        for (int i=0; i<E.size(); i++)
            System.out.print(" "+E.get(i));
        System.out.println();
        System.out.print("G:");
        for (int i=0; i<G.size(); i++)
            System.out.print(" "+G.get(i));
    }
    
}
发表于 2022-02-18 15:45:28 回复(0)

本题正确输出格式为:

E: 6 28
G: 12 18 20 24 30 36 40 42 48 54 56 60

注意 E 和 G 需要换行

发表于 2022-01-19 20:47:49 回复(0)
import java.util.*;
public class Main{
    public static void main(String[]args){
        StringBuffer w = new StringBuffer();
        StringBuffer y = new StringBuffer();
        for(int i = 1;i<=60;i++){
            int sum = 0;
            for(int j = 1;2*j<=i;j++){
                if(i%j==0){
                    sum+=j;
                }
            }
            if(i==sum){
                w.append(" "+i);
            }
            else if(sum>i){
                y.append(" "+i);
            }
            sum = 0;
        }
        System.out.println("E:"+w);
        System.out.println("G:"+y);
    }
}

发表于 2021-08-05 00:02:48 回复(0)
Java 解法
import java.util.ArrayList;

public class Main {
    public static void main(String[] args) {
        ArrayList<Integer> g = new ArrayList<>();
        ArrayList<Integer> e = new ArrayList<>();
        for (int i = 2; i <= 60; i++) {
            int sum=0;
            for (int j = 1; j < i; j++) if (i%j==0) sum+= j;
            if (sum==i) e.add(i);
            else if (sum>i) g.add(i);
        }
        System.out.print("E: ");
        for (Integer i : e) System.out.print(i+" ");
        System.out.println();
        System.out.print("G: ");
        for (Integer i : g) System.out.print(i+" ");
        
    }
}


发表于 2020-03-18 11:36:33 回复(0)
public class Main{
    public static void main(String[] args){
        StringBuffer E=new StringBuffer();
        StringBuffer G=new StringBuffer();
        for(int i=2;i<=60;i++){
            int sum=0;
            for(int k=1;k<i;k++){
                if(i%k==0){
                    sum += k;
                }
            }
            if(sum==i){
                E.append(i+" ");
            }
            if(sum>i){
                G.append(i+" ");
            }
        }
        System.out.println("E: "+E.toString().trim());
        System.out.println("G: "+G.toString().trim());
    }
}
发表于 2018-10-13 19:11:47 回复(0)
常规做法
import java.util.*;
public class Main {
    public static void main(String[] args) {
        ArrayList<Integer> E = new ArrayList<>();
        ArrayList<Integer> G = new ArrayList<>();
        for (int i = 2; i < 61; ++i) {
            int sum = 1;
            for (int j = 2; j*j < i; ++j) {
                if (i%j == 0) {
                    sum += j;
                    sum += (i/j);
                }
            }
            if (sum == i) {
                E.add(i);
            } else if (sum > i) {
                G.add(i);
            }
        }
        StringBuilder sb = new StringBuilder();
        for (int i: E) {
            sb.append(i+" ");
        }
        System.out.println("E: " + sb.substring(0, sb.length()-1).toString());
        sb = new StringBuilder();
        for (int j: G) {
            sb.append(j+" ");
        }
        System.out.println("G: " + sb.substring(0, sb.length()-1).toString());
    }
}

发表于 2018-03-27 21:29:02 回复(0)
import java.util.ArrayList;

/**
 * Created by fhqplzj on 17-1-26 at 下午6:30.
 */
public class My111 {
    private static int getSum(int n) {
        int result = 0;
        for (int i = 1; i < n; i++) {
            if (n % i == 0) {
                result += i;
            }
        }
        return result;
    }

    public static void main(String[] args) {
        /*完数*/
        ArrayList<Integer> perfect = new ArrayList<>();
        /*盈数*/
        ArrayList<Integer> over = new ArrayList<>();
        for (int i = 2; i <= 60; i++) {
            int sum = getSum(i);
            if (sum == i) {
                perfect.add(i);
            } else if (sum > i) {
                over.add(i);
            }
        }
        System.out.print("E:");
        for (Integer integer : perfect) {
            System.out.print(" " + integer);
        }
        System.out.println();
        System.out.print("G:");
        for (Integer integer : over) {
            System.out.print(" " + integer);
        }
        System.out.println();
    }
}

发表于 2017-01-26 18:36:45 回复(0)

问题信息

难度:
7条回答 11007浏览

热门推荐

通过挑战的用户

查看代码
完数VS盈数