查找具有相同顺序的所有可能排列或组合[关闭]
Posted
技术标签:
【中文标题】查找具有相同顺序的所有可能排列或组合[关闭]【英文标题】:Find all possible permutations or combinations with the same order [closed] 【发布时间】:2013-11-05 12:58:46 【问题描述】:我正在尝试编写一个程序来打印具有 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 中完成此操作的任何提示,因为语言不是考虑因素。谢谢!
【问题讨论】:
为什么要搞乱递归,听起来像是简单嵌套循环的工作 我不确定我是否理解您的示例输出 @Leeor - 九层嵌套。在嵌套级别上递归可能更容易。 您的问题与除“算法”之外的任何标签无关。从那开始:用文字写下你想要发生的过程,就像你在给出指示一样。一旦您对此感到满意,请从您知道的语言中选择一种语言。 @TedHopp,它可能看起来很糟糕,但更容易理解和维护,更安全(破坏条件可能会变得讨厌),并且更少的堆栈滥用。但是你确实使用了一个不错的技巧,+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, "");
【讨论】:
以上是关于查找具有相同顺序的所有可能排列或组合[关闭]的主要内容,如果未能解决你的问题,请参考以下文章