我正在尝试编写一个程序,用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中完成此任务的任何提示,因为语言不是考虑因素。谢谢!
答案 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, "");