牛客网 完数VS盈数(模拟、清华机试)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sunlanchang/article/details/88585203

题目描述

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

输入描述:

题目没有任何输入。

输出描述:

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

Description

#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
    int E[100], G[100], e_index = 0, g_index = 0;
    for (int n = 6; n < 61; n++)
    {
        int _sum = 0;
        for (int i = 1; i < n; i++)
        {
            if (n % i == 0)
                _sum += i;
        }
        if (_sum == n)
            E[e_index++] = n;
        else if (_sum > n)
            G[g_index++] = n;
    }
    printf("E: ");
    for (int i = 0; i < e_index; i++)
    {
        printf("%d", E[i]);
        if (i != (e_index - 1))
            printf(" ");
    }
    printf("\n");
    printf("G: ");
    for (int i = 0; i < g_index; i++)
    {
        printf("%d", G[i]);
        if (i != (g_index - 1))
            printf(" ");
    }

    return 0;
}

猜你喜欢

转载自blog.csdn.net/sunlanchang/article/details/88585203