2014-06-17 25 views
-1

最初,代碼輸出的組合無需替換。它可以在Combination without replacement C++找到當我設置完成時,我添加了從集合中減去一個的部分。例如,如果從該組的4種組合爲{0,1,2,3,4}被輸入的輸出將是如下:如何在此程序中使用模數將數字更改爲字母?

梳(來自,K =設置量選擇N =項)

梳(N = 5,K = 4) 〜輸出〜

0,1,2,3 
0,1,2,4 
0,1,3,4 
0,2,3,4 
1,2,3,4 

⇓ 梳(N = 5,K = 4-1) 〜輸出〜

0,1,2 
0,1,3 
0,1,4 
0,2,3 
0,2,4 
0,3,4 
1,2,3 
1,2,4 
1,3,4 
2,3,4 

⇓ 梳(N = 5,K =(4-2)或(3-1)) 〜輸出〜

0,1 
0,2 
0,3 
0,4 
1,2 
1,3 
1,4 
2,3 
2,4 
3,4 

⇓ 梳(5,K =(4-3)或(2-1 )) 〜輸出〜 END

如果想要將數字更改爲具有相同順序的數字的字母,將如何使用模數進行此操作?任何其他想法如何做到這一點?

我的嘗試如下。

#include <iostream> 
#include <string> 
using namespace std; 

void comb(int N, int K) 
{ 
    std::string bitmask(K, 1); 
    bitmask.resize(N, 0); 

    do { 
     for (int i = 0; i < N; ++i) 

       { 
        if (bitmask[i]) 
         std::cout << " " << i; 
        if (i == 0 || i%10 == 0) 
        std::cout << " " << "C" << endl; 
        else if (i == 1 || i%10 == 1) 
        std::cout << " " << "C#" << endl; 
        else if (i == 2 || i%10 ==1) 
        std::cout << " " << "D" << endl; 

        //the "else if" statements go up to i == 11 which is B// 
       } 
     } while (std::prev_permutation(bitmask.begin(), bitmask.end())); 
} 
int main() 
{ 
    for (int i = 6; i > 0; i--){ 
     comb(6,i); 
     } 
} 

輸出不滿意。

Sound 
0C 
1C# 
2D 
3D# 
Sound 
0C 
1C# 
2D 
D# 
0C 
1C# 
2D 
D# 
0C 
... 
+0

你能解釋一下爲什麼你需要使用一個模?這是一個編程挑戰嗎?或作業?或者你只是覺得模數是一種方式? –

+0

這是一個個人項目,所以我不需要以任何特定的方式做任何事情。我真的認爲模數(模數?)是一種選擇。當你想到一個更好的方法,並且如果你想泄漏豆子,繼續。 – user3745829

+0

只是想指出,當我= 0然後我%10 = 0,當我= 1然後我%10 = 1。你不需要做:'(i == 1)||(i%10 == 1)',因爲如果一個條件評估爲真,另一個條件也必須評估爲真(由於荒謬,瘋狂等數學規則)。 –

回答

1

那麼,經典的方式來映射0通過n整數爲另一種類型是使用陣列。

const std::string string_map[] = 
{ 
    "C", // instead of 0 
    "C#", // instead of 1 
    "D", // instead of 2 
    .... 
} 

然後在相同的代碼,而不是整數n,使用string_map[n] ...

相關問題