-4

我正在尝试编写一个程序来打印具有 8 个变量的所有可能排列,其中每个变量都有多个选择。例如。我有

A = {"A1"} //has only one choice
B = {"B1", "B2", "B3", "B4"} // has 4 choices
C = {"C1", "C2"} //has 2 choices
:
:
I = {"I1", "I2", "I3", "I4"} //has 4 choices

我的输出应该是这样的:ABCDEFGHI,每个变量都有所有可能的选择,顺序应该是一样的。

A1-B1-C1-D1-E1-F1-G1-H1-I1
A1-B2-C1-D1-E1-F1-G1-H1-I1
A1-B3-C1-D1-E1-F1-G1-H1-I1
A1-B4-C1-D1-E1-F1-G1-H1-I1
A1-B1-C2-D1-E1-F1-G1-H1-I1
etc. 

我在这里查看了所有其他问题,但我无法弄清楚我是否可以为此使用内置的 java permutations 类。我尝试编写一个递归程序,但在尝试将每个选择分解为所有可能的输出时被卡住了。感谢有关如何在 java/c++/vba 中完成此操作的任何提示,因为语言不是考虑因素。谢谢!

4

1 回答 1

1

您可以编写一系列 9 个嵌套循环,以一种简单的方式完成这项工作。但是,这将是一团糟,并且可以通过嵌套级别的递归更简单地完成。(不要尝试在每个级别上递归数据;那是没有意义的。)这是伪代码中的 Java 解决方案:

String[][] DATA = {A, B, ..., I};

void printAll(int recursionLevel, String prefix) {
    String[] level = DATA[recursionLevel];
    if (recursionLevel == DATA.length - 1) {
        // last level -- actually do the output
        for (String val : level) {
            System.out.println(prefix + "-" + val);
        }
    } else {
        // recurse
        if (prefix.length() > 0) {
            prefix += "-";
        }
        for (String val : level) {
            printAll(recursionLevel + 1, prefix + val);
        }
    }
}

您将通过调用生成输出:

printAll(0, "");
于 2013-11-05T13:09:21.240 回答