在Java中打印骰子组合
对于一个项目,我需要找到一种方法来打印每一种方式滚动5个6面骰子,顺序不重要。我曾尝试使用嵌套for循环,但我知道这是打印置换而不是组合:在Java中打印骰子组合,java,statistics,Java,Statistics,对于一个项目,我需要找到一种方法来打印每一种方式滚动5个6面骰子,顺序不重要。我曾尝试使用嵌套for循环,但我知道这是打印置换而不是组合: int counter = 0; for(int i=1; i<7; i++) { for(int m = 1; m<7; m++) { for(int j = 1; j<7; j++) {
int counter = 0;
for(int i=1; i<7; i++) {
for(int m = 1; m<7; m++) {
for(int j = 1; j<7; j++) {
for(int k = 1; k<7; k++) {
for(int h = 1; h<5; h++) {
System.out.printf("%2d%2d%2d%2d%2d",i,m,j,k,h);
counter++;
System.out.println(" "+counter);
}
}
}
}
}
int计数器=0;
对于(int i=1;i如果顺序不重要,请尝试:
for (int i = 1; i < 7; i++) {
for (int m = i; m < 7; m++) {
for (int j = m; j < 7; j++) {
...
for(int i=1;i<7;i++){
对于(int m=i;m<7;m++){
对于(int j=m;j<7;j++){
...
所有骰子相同,仅显示前3个骰子的张贴代码
也就是说,初始值永远不会小于上一个骰子的值-结果将排序。
(例如,仅考虑2个骰子,这将消除像21
或31
这样的结果,但允许11
、12
和13
)
注意:更容易阅读(IMO):对于(int i=1;i考虑这个带有两个六面骰子的简化示例:
for (int i = 1; i <= 6; i++)
for (int j = 1; j <= 6; j++)
System.out.println(i + " " + j);
在内部循环中,我以I
的值而不是1开始每个迭代。这有什么作用?在第一次迭代中,您将只打印唯一的对。但是,在后续迭代中,我需要消除一个已经滚动的数字。我通过以I。这保证没有重复对。例如,在第二次迭代中,我消除了“1”的值从当前的i
值2开始;这将消除重复的2 1
对,并以2 2
开始第二轮。到最后一次迭代时,只会打印出剩余的唯一对:6
这很简单。但是,添加另一个骰子如何影响解决方案?采用相同的方法。使用直接外部循环的计数器变量值启动最内部的循环,如下所示:
for (int i = 1; i <= 6; i++)
for (int j = i; j <= 6; j++)
for (int k = j; k <= 6; k++)
System.out.println(i + " " + j + " " + k);
for(int i=1;我想打印56面骰子的所有可能结果吗?非常好!非常感谢您的回复!谢谢!非常好explanation@oshp谢谢!我忘了提到,例如,使用这种方法,迭代次数(5个骰子)从7776次(使用DUP)减少到大约256次。
for (int i = 1; i <= 6; i++)
for (int j = i; j <= 6; j++)
for (int k = j; k <= 6; k++)
System.out.println(i + " " + j + " " + k);