gpt4 book ai didi

algorithm - 在掷骰子算法方面需要一些帮助

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:16:41 28 4
gpt4 key购买 nike

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

  • 掷出一种骰子 - 4、6、8、10 或 12 面

  • 最多可以掷出十个这种类型的骰子

  • 如果一半以上的骰子是 1,则打印一条消息,告知他们爆破并结束程序

  • 如果任何一颗骰子与掷出的骰子类型相同,则取组中的最高值。以及重新滚动等于所掷骰子类型值的骰子。

    ^^^^即- 假设您有 3 个六面骰子,掷骰子得到 4、2 和 6。您取 6 的值,因为它是最高的。然后你重新掷骰子 6。如果您得到 6,则将该 6 添加到之前的 6 并重新掷骰。如果不是,您只需将最高的骰子添加到先前的值。

最佳答案

我认为您的问题指出了您觉得这很困难的原因。您试图在一个地方解决太多问题,这会变得势不可挡。您不想创建一个单一的方法来做到这一点。你会想要创建几个。首先将问题分解成它的组成部分。

注意:我并不是为了让答案更容易解析而以面向对象的方式处理这个问题。我鼓励您更详细地考虑设计。

要求 1:掷出一种骰子 - 4、6、8、10 或 12 面

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

int Roll(int sides);

基本上 Roll 只是返回 1 和 sides(含)之间的随机值。

要求 2:最多可以滚动 10 个这种类型的骰子

这可能是一个 for 循环。

要求 3:如果一半以上的骰子是 1,则打印一条消息,告知他们爆破并结束程序

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

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

要求 4:如果任何一个骰子与掷出的骰子类型相同,则取组中的最大值。以及重新滚动等于所掷骰子类型值的骰子。

同样 - 您需要遍历结果集并执行操作请求。我不会尝试通过将此规则与之前的规则相结合来“优化”您的解决方案 - 它只会使解决方案变得复杂而没有任何实际好处。

关于algorithm - 在掷骰子算法方面需要一些帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4669557/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com