我想编写一个模拟以下内容的程序:我有6个骰子,每次都会滚动一些骰子。
当我不用骰子滚动时,我只是假设我用它滚动了0。
我想列出我可以通过这种方式获得的所有可能的变化。几个例子:
1,2,4,6,0,1
3,5,1,0,0,4
6,6,4,2,0,0 等
关于如何做到这一点的任何想法? (我使用的是java,但我当然只对一般概念感兴趣。)
提前致谢。
答案 0 :(得分:3)
由于你特别要求“只有一般概念”,这里有两种一般方法:
0-6
之间所有可能的卷进行详尽枚举(更高效)0-66666
之间的所有数字,并丢弃包含7, 8, 9
的所有数字;然后使用一些格式化的填充和逗号打印数字(如果你不关心小的效率差异,可以查看清洁代码)答案 1 :(得分:3)
您可以使用递归方法,跟踪深度: 编辑,也许这种方法会更好:
class Main {
public static void roll(String s, int depth) {
if(depth == 0)
System.out.println(s.substring(1));
else
for(int i = 0; i <= 6; i++)
roll(s + "," + i, depth - 1);
}
public static void main(String[] args) {
roll("", 6); //2nd parameter > 0
}
}
答案 2 :(得分:1)
为了优雅,我会编写一个递归方法,为给定的索引调用0-7循环,然后自己初始化下一个索引。
然后它可以初始化一个数组或不规则的大小。
答案 3 :(得分:0)
简单的Python实现。
这是你打印的时候。
def PrintAllPerms(n, str_):
if (n == 0):
print str_
else:
for i in ["1","2","3","4","5","6"]:
str_ = str_ + i
PrintAllPerms(n-1, str_)
str_ = str_[:-1]
PrintAllPerms(2,"")
这是你想要返回整个排列的时候。
def PrintAllPerms(n, arr, str_):
if (n == 0):
arr.append(str_)
return arr
else:
for i in ["1","2","3","4","5","6"]:
str_ = str_ + i
arr = PrintAllPerms(n-1,arr,str_)
str_ = str_[:-1]
return arr
PrintAllPerms(2,[],"")
答案 4 :(得分:-2)
public class DiceTest {
public static void main(String[] args) {
int[] dice = {0, 1, 2, 3, 4, 5, 6 };
for (int i : dice) {
for (int j : dice) {
System.out.println("Printing dice values : " + i + " " + j);
}
}
}
}