【问题标题】:All possible permutations of dice rolls掷骰子的所有可能排列
【发布时间】:2012-12-08 19:15:39
【问题描述】:

我想编写一个程序来模拟以下内容:我有 6 个骰子,每次都掷一些骰子。

当我不掷骰子时,我只是假设我掷骰子是 0。

我想列出我可以通过这种方式获得的所有可能的变化。几个例子:

1,2,4,6,0,1

3,5,1,0,0,4

6,6,4,2,0,0 等等

关于如何做到这一点的任何想法? (我用的是java,当然我只对一般概念感兴趣。)

提前致谢。

【问题讨论】:

  • 查看右侧的“相关”部分。已经有几十个问题在问这个问题。
  • 当然我在问这个问题之前已经搜索过了,但是我找不到这样的东西。
  • 至于代码,没走多远,我就意识到我最初的概念非常愚蠢,从那时起我只是在思考。 (最初我的代码只是从每个骰子的值中减去 1,直到它为 0,然后它转到下一个)
  • 仅供参考,dice 是复数。单数形式是die。也许这与编程无关,但如果您的软件有用户界面,您应该向用户展示正确的词语。 :-)

标签: java math permutation variations


【解决方案1】:

您可以使用递归方法来跟踪深度: 编辑,也许这种方法会更好:

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】:

由于您特别要求“仅是一般概念”,因此这里有两种一般方法:

  • 使用 6 级嵌套 for 循环,只需对 0-6 之间的所有可能滚动进行详尽枚举(更高效)
  • 只需使用1个for循环生成0-66666之间的所有数字,丢弃任何包含7, 8, 9的数字;然后用一些格式化的填充和逗号打印数字(如果您不关心小的效率差异,请查看更简洁的代码)

【讨论】:

  • 谢谢!我首先想到了6级嵌套循环,但我认为必须有一个更方便的解决方案。 (我仍然想知道这是否可以通过递归来完成。)我想我会选择第二个,好主意,谢谢!
  • 第一种方法很乱,以后很难修改/更新。第二种方法极其效率低下。
  • 是的,但我只需要它来解决这个特殊问题,所以它会很好。尽管递归方法更好。
【解决方案3】:

为了优雅起见,我会编写一个递归方法,通过 0-7 为给定索引调用循环,然后自己初始化下一个索引。

然后它可以初始化一个数组或任意大小。

【讨论】:

    【解决方案4】:

    简单的 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,[],"")
    

    【讨论】:

      【解决方案5】:
      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);
                  }
              }
          }
      }
      

      【讨论】:

      • 请为您的回答提供一些背景信息。
      猜你喜欢
      • 1970-01-01
      • 2017-04-09
      • 1970-01-01
      • 1970-01-01
      • 2018-09-08
      • 2021-04-06
      • 1970-01-01
      • 2019-03-31
      • 2018-05-03
      相关资源
      最近更新 更多