ramees hariz Ответов: 1

Выведите специальный тип комбинации, равный сумме значений


Привет мне нужна небольшая помощь я нашел этот код ниже из интернета мне нравится добавлять некоторые изменения в этот код .

Этот код распечатывает все возможные комбинации слотов общее значение должно быть = 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

ладно

1 Ответов

Рейтинг:
2

OriginalGriff

Мы не делаем домашнее задание: оно задано не просто так. Она существует для того, чтобы вы думали о том, что вам сказали, и пытались понять это. Он также существует для того, чтобы ваш наставник мог определить области, в которых вы слабы, и сосредоточить больше внимания на корректирующих действиях.
"Поиск кода в интернете" и надежда на то, что он делает то, что вам нужно сдать, - это не жизнеспособная стратегия в долгосрочной перспективе: это означает, что вы провалите свой курс, потому что не сможете сделать это на выпускном экзамене. И если вы не понимаете код, который вы загружаете, то он может сделать что угодно - в том числе сильно испортить вашу систему: например, одна или две скрытые строки кода могут запустить программу-вымогатель на вашем компьютере. Поэтому, прежде чем вы начнете играть с интернет - кодом, вам нужно понять его, как он работает, почему он работает-и это означает, что вы можете изменить его самостоятельно...

Попробуйте сами, возможно, вы обнаружите, что это не так сложно, как вы думаете!

Если вы столкнетесь с конкретной проблемой, то, пожалуйста, спросите об этом, и мы сделаем все возможное, чтобы помочь. Но мы не собираемся делать все это для вас!


ramees hariz

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

OriginalGriff

Не используйте YouTube в качестве источника учебников и, конечно же, не в качестве учебного пособия, чтобы стать компетентным разработчиком!
Хотя там есть хороший материал, большая его часть-это бедный мусор, произведенный людьми с немногим большим знанием, чем вы (если это так много), и даже с хорошим материалом -
который трудно найти - если он не структурирует весь предмет в логические блоки, и вы не будете следовать им всем по порядку, вы пропустите огромное количество информации, которая вам действительно нужна.

Вместо этого возьмите хорошую книгу (Wrox или Addison-Welsey делают отличные) или лучше правильный курс и проследите его от начала до конца, делая все примеры.

Нет никаких коротких путей к тому, чтобы быть хорошим разработчиком - независимо от того, насколько youtube хотел бы, чтобы вы верили в обратное.

ramees hariz

я также использую принципы программирования и практика использования C++ Бьярн Страуструп повторный выпуск