查找具有相同订单的所有可能的排列或组合

时间:2013-11-05 12:58:46

标签: java c++ algorithm excel vba

我正在尝试编写一个程序,用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

我的输出应为:A-B-C-D-E-F-G-H-I,每个变量都有可能的选择,顺序应相同。

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排列类。我尝试编写一个递归程序,但在尝试将每个选项分解为所有可能的输出时都被卡住了。感谢有关如何在java / c ++ / vba中完成此任务的任何提示,因为语言不是考虑因素。谢谢!

1 个答案:

答案 0 :(得分: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, "");