【问题标题】:Figure all combinations of two integers of a product图一个产品的两个整数的所有组合
【发布时间】:2019-02-19 00:34:14
【问题描述】:

示例:乘积为 36 的两个整数的所有组合

输出

1*36、2*18、3*12、4*9、6*6等。

不久前我在一本书上发现了这个问题,但我想不出办法。请建议解决此问题的方法/代码。

【问题讨论】:

标签: c++ math


【解决方案1】:

你可以这样做:

#include <iostream>

int main()
{
    int n = 36;
    int biggestDivisor = n; // in case n is prime number, biggestDivisor is n

    for (int i = 1; i < biggestDivisor; i++) {
        if (n % i == 0) {
            std::cout << i << "*" << n / i << " ";
            biggestDivisor = n / i; // done so as to prevent 9 * 4 from getting printed if 4 * 9 is printed
        }
    }
}

请注意,上述方法适用于所有n &gt; 1

根据我的理解,您不想打印 9 * 4,以防 4 * 9 已经打印。

如果要打印所有对,请执行以下操作:

#include <iostream>
#include <set>

int main()
{
    int n = 36;
    int biggestDivisor = n;

    std::set<std::pair<int, int> > combinationsList;

    for (int i = 1; i < biggestDivisor; i++) {
        if (n % i == 0) {
            combinationsList.insert(std::make_pair(i, n / i));
            combinationsList.insert(std::make_pair(n / i, i));
            biggestDivisor = n / i;
        }
    }

    for (const auto &ele: combinationsList) {
        std::cout << ele.first << "*" << ele.second << " ";
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-29
    • 2019-08-20
    • 1970-01-01
    • 2013-10-20
    • 2014-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多