2013-06-20 48 views
0

我想有這樣的事情:所有可能的'n'字符串組合,重複:C = n!/(n-k)!

combination no 1: sentence1 sentence2 sentence3 sentence4 

combination no 2: sentence1 sentence2 sentence4 sentence3 

combination no 3: sentence1 sentence3 sentence2 sentence4 

combination no 4: sentence1 sentence3 sentence4 sentence2 

combination no 5: sentence1 sentence4 sentence3 sentence2 

combination no 6: sentence1 sentence4 sentence2 sentence3 

等等......

現在,使用下面的代碼,我該怎麼處理公式中什麼是「K」變量? 有什麼缺失?再一次,它是關於重複的組合,所以我認爲公式是C = n!/(n-k)! 。

// next_permutation example 
#include <iostream>  // std::cout 
#include <algorithm> // std::next_permutation, std::sort 
#include <string>  // std::string 
#include <vector>  // std::vector 

int main() { 
    std::string sentence1 = " A Sentence number one "; 
    std::string sentence2 = " B Sentence number two "; 
    std::string sentence3 = " C Sentence number three "; 
    std::string sentence4 = " D Sentence number four "; 

    // Store all the elements in a container (here a std::vector) 
    std::vector<std::string> myVectorOfStrings;  
    // In the vector we add all the sentences. 
    // Note : It is possible to do myVectorOfStrings.push_back("Some sentence"); 
    myVectorOfStrings.push_back(sentence1); 
    myVectorOfStrings.push_back(sentence2); 
    myVectorOfStrings.push_back(sentence3); 
    myVectorOfStrings.push_back(sentence4); 

    // The elements must be sorted to output all the combinations 
    std::sort (myVectorOfStrings.begin(),myVectorOfStrings.end()); 


    std::cout << "The 4! possible permutations with 4 elements:\n"; 
    do { 
    //This printing can be improved to handle any number of sentences, not only four. 
    std::cout << myVectorOfStrings[0] << ' ' << myVectorOfStrings[1] << ' ' << myVectorOfStrings[2] << ' ' << myVectorOfStrings[3] << '\n'; 
    } while (std::next_permutation(myVectorOfStrings.begin(),myVectorOfStrings.end())); 

    std::cout << "After loop: " << myVectorOfStrings[0] << ' ' << myVectorOfStrings[1] << ' ' << myVectorOfStrings[2] << ' ' << myVectorOfStrings[3] << '\n'; 

    return 0; 
} 
+0

我知道,您可能是對的。我試圖閱讀它,但事實是這對我來說依然太難了。所以我希望能以更簡單的方式來處理這個問題。 – user2499266

回答

0

你說的k是自動處理的。假設,如果你在向量中插入兩個相似的句子,比如說有4個句子,其中兩個是相同的。那麼排列的總數是4!/2!=12。所以,該功能只打印12個排列,(不是24)。看到您的修改後的代碼輸出類似的句子here

相關問題