m0_67829352 2023-03-16 15:41 采纳率: 50%
浏览 70
已结题

求解答怎么用C++写这

完美数是等于其所有(非自我)的除数之和的数字。以6为例:
6 = 1 + 2 + 3
一个等于其所有真因数之和的数字 —— 只要其中一个是负数 —— 并不十分完美,但令人钦佩。
举例而言, 12 的正确除数是 12346总计 16。但是,如果 2 为负数,则总数为 12,即数字本身。因此,12 是一个令人钦佩的数字。
12 = 1 - 2 + 3 + 4 + 6创建一个将数字 n 作为输入的函数。如果 n 是完美的,返回 "Perfect"。
如果 n 是令人钦佩的,则返回必须呈现负数的正确除数以使正确除数的总和等于 n。如果n既不完美也不令人钦佩,则返回 "Neither"。

  • 写回答

6条回答 默认 最新

  • 快乐鹦鹉 2023-03-16 15:44
    关注

    先求出所有因子及其总和,如果总和减去某个因子的两倍的结果等于这个数,就Perfect了

    #include <iostream>
    using namespace std;
    
    int perfect(int n)
    {
        int *y = new int[n/2];
        int i,count = 0,sum=0,res=-1;
        for(i=1;i<=n/2;i++)
        {
            if(n%i==0)
            {
                y[count++] = i;
                sum += i;
            }
        }
        if(sum == n)
        {    
            delete []y;
            return 0;
        }
        for(i=0;i<count;i++)
        {
            if(sum - y[i]*2 == n)
            {
                res = y[i];
                break;
            }
        }
        delete []y;
        return res;
    }
    
    int main()
    {
        int n;
        cin>>n;
        int r = perfect(n);
        if(r==0)
            cout<<"Perfect"<<endl;
        else if(r == -1)
            cout<<"Neither"<<endl;
        else
            cout<<<<r<<endl;
        system("pause");
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(5条)

报告相同问题?

问题事件

  • 系统已结题 3月24日
  • 已采纳回答 3月16日
  • 赞助了问题酬金15元 3月16日
  • 创建了问题 3月16日

悬赏问题

  • ¥20 cad图纸,chx-3六轴码垛机器人
  • ¥15 移动摄像头专网需要解vlan
  • ¥15 对于这个问题的算法代码
  • ¥20 access多表提取相同字段数据并合并
  • ¥20 基于MSP430f5529的MPU6050驱动,求出欧拉角
  • ¥20 Java-Oj-桌布的计算
  • ¥15 powerbuilder中的datawindow数据整合到新的DataWindow
  • ¥20 有人知道这种图怎么画吗?
  • ¥15 pyqt6如何引用qrc文件加载里面的的资源
  • ¥15 安卓JNI项目使用lua上的问题