2015-09-08 2 views
-2

im пытается создать рабочую программу, которая должна пройти через все 3-значные перестановки из заданного массива элементов X и в каждом цикле суммировать все 3 цифры и сравнить это заданное число следующего правила, которое применяется в: сумма любых 2-х чисел от данной перестановки должны быть> чем 3 числа в перестановке3 цифры - не повторяющиеся перестановки - из массива элементов X

, что я пытался:

for (int q = 0; q < sizeofarray; q++) 

for (int w = 0; w < sizeofarray; w++) 

    for (int e = 0; e < sizeofarray; e++){ 

compare_digits_from_permutation_to_given_number 

(givennumber,array[q],array[w],array[e]); 


} 

мой код абсолютно оленья кожа работа, это только та часть, которая должна делать то, о чем я прошу, но это перестановки только из первых трех элементов, массив динамична я также не имею понятия, как это сделать, сумма любых 2-х чисел должно быть больше, чем 3-й стороне

+1

Я попытался скомпилировать, но есть много кода отсутствует. Пожалуйста, отредактируйте свой пост, чтобы он компилировался. –

+0

Что такое массив [q], массив [w], массив [e]? Что такое compare_digits_from_permutation_to_given_number? –

+0

Пожалуйста, не удаляйте оригинальный вопрос заново. Этот сайт сохраняет вопросы и ответы, чтобы будущие зрители получали выгоду от полученной вами помощи. –

ответ

0

Поскольку вы помеченной вас вопрос, как C++, я хотел бы предложить использовать встроенный std::next_permutation():

#include <algorithm> 
#include <string> 
#include <iostream> 

int main() 
{ 
    std::vector<int> v = {1,2,3} 
    do { 
     compare_digits_from_permutation_to_given_number(givennumber,v[0],v[1],v[2]); 
    } while(std::next_permutation(v.begin(), v.end())); 
} 
+0

Это сделало бы перестановки всех итераторов от 'begin()' до 'end()' (или любых других итераторов). Вы можете легко расширить его до массива из n элементов. – syntagma

+0

@ josh31 это не перестановки. – syntagma

0

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

void foo(std::vector<int> v, int n) 
{ 
#if 1 // remove duplicate input, so with {3, 3, 3, 4, 5}, 
     // the triplet (3, 4, 5) is shown only once. 
    std::sort(v.begin(), v.end()); 
    v.erase(std::unique(v.begin(), v.end()), v.end()); 
#endif 

    for (const auto& e1 : v) 
    { 
     for (const auto& e2 : v) 
     { 
      if (e2 == e1) { 
       continue; 
      } 
      for (const auto& e3 : v) 
      { 
       if (e3 == e1 || e3 == e2) { 
        continue; 
       } 
       if (e1 >= e2 + e3 || e2 >= e1 + e3 || e3 >= e1 + e2) { 
        continue; 
       } 
       const auto total = e1 + e2 + e3; 
       std::cout << e1 << "+" << e2 << "+" << e3 << "=" << total; 
       if (total < n) { 
        std::cout << " is less than " << n << std::endl; 
       } else if (total == n) { 
        std::cout << " is equal to " << n << std::endl; 
       } else { 
        std::cout << " is more than " << n << std::endl; 
       } 
      } 
     } 
    } 
} 

Live Demo

Смежные вопросы