我如何对以下方法的算法进行伪编码:
滚动一种模具 - 4,6,8,10或12面
可以卷起十种此类型的
如果超过一半的骰子为1,则打印出一条消息,表明它们已经破坏并结束程序
如果任何骰子等于掷骰子的类型,请从该组中取出最高值。以及重新轧制与模具轧制类型相等的模具。
^^^^即。 - 假设你有3个六面骰子,你滚动它们你得到4,2和6.你取6的值,因为它是最高的。然后你重新滚动六个模具。如果你得到6,那么你将六个加到前六个并重新滚动。如果不是,您只需将最高的模具添加到之前的值。
答案 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)
您的算法必须:
实际上为你做的事情还没有多少。