Проблема делителей положительного целого числа N с рекурсией ⇐ C++
Проблема делителей положительного целого числа N с рекурсией
Осталось немного доделать задачу, буду благодарен, если вы мне поможете. N - целое положительное число; Мне нужно найти целые числа A, B, C и D, такие, что они являются делителями N и N = A + B + C + D; Если четверок чисел несколько, то стоит вывести такие, чтобы их произведение было максимальным: (A*B*C*D)max. Если таких четверок нет, необходимо вывести «-1».
Я изложу свои мысли по решению этой проблемы, возможно, вы подскажете более эффективный алгоритм:
Я понимаю, что проблему можно решить с помощью рекурсии с использованием рекурсивного дерева. Например: целое число N = 8, тогда делители будут {1, 2, 4}, 8 я отсюда исключил, потому что второе условие о сумме не будет выполнено. Будем собирать делители в вектор до тех пор, пока количество ребер в компоненте связности графа не достигнет 3. Сначала я выведу все возможные четверки таких чисел в этом примере. Мой код на C++:
#include использование пространства имен std; voidsolve(vector div, вектор v) { for(int i = 0; i < div.size(); ++i) { v.push_back(div); если (v.size() == 4) { cout
Осталось немного доделать задачу, буду благодарен, если вы мне поможете. N - целое положительное число; Мне нужно найти целые числа A, B, C и D, такие, что они являются делителями N и N = A + B + C + D; Если четверок чисел несколько, то стоит вывести такие, чтобы их произведение было максимальным: (A*B*C*D)max. Если таких четверок нет, необходимо вывести «-1».
Я изложу свои мысли по решению этой проблемы, возможно, вы подскажете более эффективный алгоритм:
Я понимаю, что проблему можно решить с помощью рекурсии с использованием рекурсивного дерева. Например: целое число N = 8, тогда делители будут {1, 2, 4}, 8 я отсюда исключил, потому что второе условие о сумме не будет выполнено. Будем собирать делители в вектор до тех пор, пока количество ребер в компоненте связности графа не достигнет 3. Сначала я выведу все возможные четверки таких чисел в этом примере. Мой код на C++:
#include использование пространства имен std; voidsolve(vector div, вектор v) { for(int i = 0; i < div.size(); ++i) { v.push_back(div); если (v.size() == 4) { cout
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Как я могу обойтись до ближайшего верхнего целого числа и вниз до нижнего целого числа?
Anonymous » » в форуме C# - 0 Ответы
- 9 Просмотры
-
Последнее сообщение Anonymous
-