2016-11-25 83 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; 
} 
相关问题