首页 > 试题广场 >

完数VS盈数

[编程题]完数VS盈数
  • 热度指数:35576 时间限制: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

输入

输出

按题目要求进行输出即可。
为什么自测一直报错,但是能提交成功啊?
#include <stdio.h>

int fun(int x){
    int sum=0;
    for(int i=1;i<x;i++){
        if(x%i==0) sum+=i;
    }
    return sum;
}

int main() {
    int e[60];int g[60];
    int i=0,j=0;
    for(int k=2;k<=60;k++){
        if(k==fun(k)) e[i++]=k;
        if(k<fun(k)) g[j++]=k;
    }
    printf("E:");
    for(int k=0;k<i;k++){
        printf(" %d",e[k]);
    }
    printf("\n");
    printf("G:");
    for(int k=0;k<j;k++){
        printf(" %d",g[k]);
    }
}

编辑于 2024-02-29 22:57:16 回复(0)
#include <stdio.h>

int main() {
    int a[58], b[58];
    int top1 = -1, top2 = -1;
    for (int i = 2; i <= 60; i++) {
        int count = 0;
        for (int j = 1; j<= i/2; j++) {
            if (i % j == 0)
                count += j;
        }
        if (count == i) {
            a[++top1] = i;
        } else if (count > i) {
            b[++top2] = i;
        }
    }
    printf("E: ");
    for (int i = 0; i < top1; i++) {
        printf("%d ", a[i]);
    }
    printf("%d",a[top1]);
    printf("\nG: ");
    for (int i = 0; i < top2; i++) {
        printf("%d ", b[i]);
    }
    printf("%d",b[top2]);
    return 0;
}
格式跟shit一样
发表于 2023-10-04 10:06:06 回复(0)
#include <stdio.h>
int main() {
    int sum = 0;
    int wan_num = 0, ying_num = 0;
    int wan[61] = {0};
    int ying[61] = {0};
    for (int i = 2; i <= 60; i++) {
        for (int j = i / 2; j > 0; j--) {
            if (i % j == 0) {
                sum += j;
            }
        }
        if (sum == i) {
            wan[wan_num++] = i;
        }
        if (sum > i) {
            ying[ying_num++] = i;
        }
        sum = 0;
    }
    printf("E:");
    for (int i = 0; i < wan_num; i++) {
        printf(" %d", wan[i]);
    }
    printf("\nG:");
    for (int i = 0; i < ying_num; i++) {
        printf(" %d", ying[i]);
    }
    return 0;
}

发表于 2023-03-09 16:02:52 回复(0)
没按格式,懂就行了
#include<stdio.h>
int find(int n) {
    int sum = 0;
    for (int i = 1; i < n; i++) {
        if (n % i == 0) {
            sum += i;
        }
    }
    return sum;
}
int main() {
    int e[20]  , g[20] = { 0 };
    int k, j,i;
    int count1 = 0,count2=0;
    for ( k = 0, j = 0, i = 2; i < 61; i++) {
        if (find(i) == i) {
            e[j++] = i;       
        }
        else if (find(i) > i) {
            g[k++] = i;
        }
    }
    for (i = 0; i <j; i++) {
        printf("%d ",e[i]);
    }
    printf("\n");
    for (i = 0; i <k; i++) {
        printf("%d ", g[i]);
    }
    return 0;
}
发表于 2022-04-06 20:39:19 回复(0)