需要一些骰子滚动算法的帮助

时间:2011-01-12 13:56:19

标签: algorithm dice

我如何对以下方法的算法进行伪编码:

  • 滚动一种模具 - 4,6,8,10或12面

  • 可以卷起十种此类型的

  • 如果超过一半的骰子为1,则打印出一条消息,表明它们已经破坏并结束程序

  • 如果任何骰子等于掷骰子的类型,请从该组中取出最高值。以及重新轧制与模具轧制类型相等的模具。

    ^^^^即。 - 假设你有3个六面骰子,你滚动它们你得到4,2和6.你取6的值,因为它是最高的。然后你重新滚动六个模具。如果你得到6,那么你将六个加到前六个并重新滚动。如果不是,您只需将最高的模具添加到之前的值。

2 个答案:

答案 0 :(得分:6)

我认为你的问题指出了你发现这个困难的原因。你试图在一个地方解决太多而且变得势不可挡。您不想创建一个方法来执行此操作。你会想要创建几个。首先将问题分解为组成部分。

注意:我不是以OO的方式接近这个,以使答案更容易解析。我鼓励您更详细地考虑设计。

要求1:滚动一种模具 - 4,6,8,10或12面

好的 - 所以我们需要一些类似的方法:

int Roll(int sides);

基本上Roll只返回1和side(包括)之间的随机值。

要求2:最多可以滚动十种此类模具

这可能是for循环。

要求3:如果超过一半的骰子为1,则打印出一条消息,表明它们已经破坏并结束程序

此要求意味着您将每个调用的结果存储在集合中的Roll中 - 例如,List或int [](整数数组)。

接下来,它表示您正在迭代该集合并计算“1”的卷数。如果计数大于滚动总数的一半,则结束程序。计数很容易(对于循环或foreach可能是你最好的选择)并且你知道有多少卷(根据集合中的项目数量以及因为你在制作卷时你的for循环有一个计数器..分开比较。

要求4:如果任何骰子等于掷骰子的类型,请从该组中取出最高值。以及重新轧制与模具轧制类型相等的模具。

再次 - 您需要迭代结果集并执行操作请求。我不会尝试通过将此规则与之前的规则相结合来“优化”您的解决方案 - 它只会使解决方案无法真正获益。

答案 1 :(得分:0)

您的算法必须:

  1. 掷骰子
  2. 检查结果以查看一半是否为1
  3. 检查并可能重新滚动高数字
  4. 跟踪滚动骰子中接受的数字和运行总数
  5. 实际上为你做的事情还没有多少。