最大乘积 - C++ 代码实现

题目描述

一个正整数可以表示为若干个互不相同的正整数之和,如 '6 = 1 + 5 = 2 + 4 = 1 + 2 + 3 = 6',有 '4' 种表示方法,这 '4' 种表示方法里,拆分出的数字的乘积分别为 '5'、'8'、'6'、'6'。 给出 'n',求 'n' 的所有表示方案中,拆分出的数字的乘积最大的方案,按升序依次输出拆分出的数字。

输入格式

从标准输入读入数据。 输入一个正整数 'n' ('n ≤ 10^6')。

输出格式

输出到标准输出。 按升序输出拆分出的数字。

样例 #1

样例输入 #1

6

样例输出 #1

2 4

样例 #2

样例输入 #2

100

样例输出 #2

2 3 5 6 7 8 9 10 11 12 13 14

C++ 代码实现

#include <iostream>
#include <vector>
using namespace std;

vector<int> maxProduct(int n) {
    vector<int> result;
    int i = 2;
    while (n > 1) {
        if (n % i == 0) {
            result.push_back(i);
            n /= i;
        } else {
            i++;
        }
    }
    return result;
}

int main() {
    int n;
    cin >> n;
    
    vector<int> result = maxProduct(n);
    
    for (int i = 0; i < result.size(); i++) {
        cout << result[i] << " ";
    }
    
    return 0;
}

代码解释:

  • maxProduct 函数:
    • 接收一个正整数 n 作为输入。
    • 使用一个循环,从 2 开始尝试对 n 进行因数分解。
    • 如果 n 可以被 i 整除,则将 i 加入到结果数组 result 中,并将 n 除以 i。
    • 否则,将 i 加 1,继续尝试。
    • 当 n 变成 1 时,循环结束,返回结果数组 result。
  • main 函数:
    • 从标准输入读取 n 的值。
    • 调用 maxProduct 函数获取拆分结果。
    • 按升序输出结果数组中的每个数字。

代码逻辑:

该代码利用了贪心算法的思想。在对 n 进行分解时,优先选择较小的因子,以尽可能保证拆分后的数字的乘积最大。例如,对于 100,首先选择 2,然后选择 5,以此类推。

注意:

  • 该代码只考虑了将 n 拆分成互不相同的正整数的情况。
  • 代码中的循环条件为 n > 1,而不是 n > 0,因为 1 无法再进行分解。
  • 代码中使用了 vector 容器来存储结果数组,方便对结果进行操作。
最大乘积 - C++ 代码实现

原文地址: https://www.cveoy.top/t/topic/f3pR 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录