2015-09-08 74 views
-2

即時嘗試做一個工作程序,必須通過給定的X元素數組中的所有3個數字排列,並在每個循環中總和所有3個數字並進行比較它給定數量正在被應用的下一條規則是:從給定的置換任意2個號碼的總和必須>比排列3位 - 非重複排列 - 從X元素陣列

第3號是我的嘗試:

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]); 


} 

我的代碼絕對不列入工作,這只是應該做我正在問的事情的一部分,但它只是前3個元素的排列,陣列是動態的,我也不要有想法如何做到這一點,任何兩個數字的總和必須大於第三邊

+1

我試圖編譯,但遺漏了很多的代碼。請編輯您的文章,以便編譯。 –

+0

什麼是數組[數組] [數組] [數組] [數組] [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