Выведите специальный тип комбинации, равный сумме значений
Привет мне нужна небольшая помощь я нашел этот код ниже из интернета мне нравится добавлять некоторые изменения в этот код .
Этот код распечатывает все возможные комбинации слотов общее значение должно быть = sum
Как я могу управлять каждым слотом с максимальным значением емкости пример,если слоты = 3, а сумма= 8, то мне нравится добавлять емкость (массив или Вектор) = [4][2][3] вся последовательность должна находиться внутри этого диапазона . таким образом, я также могу пропустить такую последовательность, которая равна сумме [0][4][4] . Мне нужна помощь, извините за мой английский, который я изучаю ..
#include <iostream> #include <vector> #include <algorithm> template <typename T, typename ForwardIterator> bool increment(ForwardIterator first, ForwardIterator last, T maximum) { for (auto it = first; it != last; ++it) { if (*it != maximum) { std::fill(first, it, ++*it); return true; } } return false; } int main() { int minimum = 1; // included int slots = 3; int sum = 8; int internal_max = sum - slots * minimum; std::vector<int> vect(slots - 1, 0); do { auto previous_pos = internal_max; for (auto it = vect.begin(); it != vect.end(); ++it) { auto val = previous_pos - *it + minimum; previous_pos = *it; std::cout << val << " "; } std::cout << previous_pos + minimum << std::endl; } while (increment(vect.begin(), vect.end(), internal_max)); }
Что я уже пробовал:
// next_permutation example #include <iostream> // std::cout #include <algorithm> // std::next_permutation, std::sort #include <vector> using namespace std; template <typename T, typename ForwardIterator> bool increment(ForwardIterator first, ForwardIterator Last, T Maximum) { for (auto it = first; it != Last; ++it) { if (*it != Maximum) { fill(first, it, ++*it); return true; } } return false; } int main() { int minimum = 0; int slots = 3; int sum = 124; int internal_Max = sum - slots * minimum; vector<int> vect(slots - 1, 0); int count = 0, CT = 0, L1 = 127, L2 = 1, L3 = 127, R1 = 0, R2 = 0, R3 = 0; bool F1 = false, F2 = false; do { auto previous_po = internal_Max; for (auto it = vect.begin(); it != vect.end(); ++it) { auto val = previous_po - *it + minimum; previous_po = *it; if (CT == 0) { if (val <= L1) { F1 = true; R1 = val; } } else if (CT == 1) { if (val <= L2) { F2 = true; R2 = val; } } CT++; } CT = 0; if (F1 && F2 && (previous_po + minimum) <= L3) { cout << R1 << " " << R2 << " " << previous_po + minimum << " " << "Count = " << count++ << endl; } F1 = false; F2 = false; } while (increment(vect.begin(), vect.end(), internal_Max)); return 0; }
Это то, что я получил до сих пор, я знаю, что это не правильный путь, но это будет делать то, что я хочу . то что я сделал это пропустил какую то комбинацию из распечатки я даже не хочу чтобы эта комбинация вычислялась плз покажите мне правильный путь
Richard MacCutchan
"я нашел этот код ниже из интернета"
Если вы не понимаете этого, спросите человека, который это написал.
ramees hariz
он не отвечает. он не заходил на этот сайт с 2016 года
Richard MacCutchan
Тогда не скачивайте код, который вы не понимаете. Возьмите хорошую книгу по C/C++ и проработайте ее. Это лучший способ учиться на сегодняшний день.
ramees hariz
ладно