Нарисуйте все комбинации двух целых чисел произведения - PullRequest
0 голосов
/ 19 февраля 2019

пример: все комбинации двух целых чисел, произведение которых составляет 36

вывод :

1 * 36, 2 * 18, 3 * 12, 4 * 9,6 * 6 и т. Д.

Я нашел этот вопрос в книге некоторое время назад, и я не могу придумать подход.Пожалуйста, предложите подход / код для этой проблемы.

1 Ответ

0 голосов
/ 19 февраля 2019

Вы можете сделать что-то вроде этого:

#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 > 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 << " ";
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...