有没有办法减少这段代码?

时间:2016-11-25 02:36:31

标签: c++

我相信,使用for循环减少它,但我不知道如何。

有没有办法减少这段代码?

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

3 个答案:

答案 0 :(得分: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 :(得分: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

答案 2 :(得分: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
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;
}