2016-11-25 127 views
-4

用於循環來減少它,我相信,但我不知道如何。有什麼辦法可以減少這段代碼?

有什麼辦法可以減少這段代碼?

num1 = 1, num2 = 2, num3 = 3; 
    display(num1, num2, num3); 

    num1 = 1, num2 = 3, num3 = 2; 
    display(num1, num2, num3); 

    num1 = 2, num2 = 1, num3 = 3; 
    display(num1, num2, num3); 

    num1 = 2, num2 = 3, num3 = 1; 
    display(num1, num2, num3); 

    num1 = 3, num2 = 1, num3 = 2; 
    display(num1, num2, num3); 

    num1 = 3, num2 = 2, num3 = 1; 
    display(num1, num2, num3); 
+2

什麼語言代替富? Java和C++是非常不同的。 –

+0

我使用C++,如果你喜歡Java,那很好。 – symta

+0

@symta它會永遠持續3個數字和3個參數嗎?序列是否永遠從1增量開始1?我說「永遠」,因爲你不想用不可擴展的解決方案將自己編碼到角落。 – PaulMcKenzie

回答

1

在Java或C++中,您可以使用一組數組。在Java 8+喜歡,

int[][] nums = { { 1, 2, 3 }, { 1, 3, 2 }, { 2, 1, 3 }, { 2, 3, 1 }, 
     { 3, 1, 2 }, { 3, 2, 1 } }; 
Stream.of(nums).forEachOrdered(x -> display(x[0], x[1], x[2])); 

在C++

int nums[6][3] = { { 1, 2, 3 }, { 1, 3, 2 }, { 2, 1, 3 }, { 2, 3, 1 }, 
     { 3, 1, 2 }, { 3, 2, 1 } }; 
for (int i = 0; i < 6; i++) { 
     display(nums[i][0], nums[i][1], nums[i][2]); 
} 
1

可以使用C++函數next_permutation()來獲得的[1,2,3],代碼的所有排列很簡單,像這樣

int num[3] = {1, 2, 3}; 
do 
{ 
    for (int j = 0; j < 3; j++) 
    { 
     cout << num[j]; 
    } 
    cout << endl; 
} while (next_permutation(num, num + 3)); 

更多關於排列你可以看到這個https://en.wikipedia.org/wiki/Permutation

+0

我有這樣的感覺,這不會顯示第一個排列,它不會顯示全部6個排列。 – 2016-11-25 03:08:53

+0

你是對的,我沒有測試這個代碼。 – xindoo

0

沒有額外的信息作爲你想達到什麼這是很難回答的,我想實現一個功能,如果我是用C++,看起來像這樣

void foo(int x, int y, int z) 
{ 
    cout << x << y << z; 
} 

void main 
{ 
    foo(1,2,3); 
    foo(2,1,3); 
} 

將是一個方法,使代碼更易於管理......這取決於你想要實現的目標。

或考慮以下

foo(int x, int y, int z) 
{ 
    cout << x << y << z; 
    cout << x << z << y; 
    cout << z << x << y; 
    cout << z << y << x; 
    cout << y << z << x; 
    cout << y << x << z; 
} 
相關問題