【问题标题】:Facing problems with Function questions?面临功能问题的问题?
【发布时间】:2015-05-03 15:07:02
【问题描述】:

我遇到了这个问题:

写一个函数void:

bool tossCoin (bool& flag);

函数返回 true 表示头部(45% 的机会),返回 false 表示尾部(45% 的机会)。抛掷失败的概率为 10%,例如没有落到脸上;如果发生这种情况,则标志设置为 false,调用者必须再次调用该函数(再次掷硬币)。

使用提示用户选择(0 尾,1 头)的程序测试该函数,然后调用该函数以确定用户是否会获胜。如果该函数将标志设置为 false,则您必须打印一条消息,指示需要重新投掷硬币,

提示:你必须使用 rand() 函数

我的问题是我不知道如何开始处理这个问题以及如何正确地做?

【问题讨论】:

  • 看起来像家庭作业。提示:开始解决问题,然后寻求帮助。

标签: c++ visual-studio function boolean flags


【解决方案1】:

所以,基本上你需要一种可以给你随机分布45% - 45% - 10%的方法。您可以使用以下算法轻松完成:

int a = rand() % 100;
if (a < 45)
    return "head";
if (a >= 45 && a < 90)
    return "tail";
else
    return "fail";

但这是一个非常糟糕的算法,因为分布没有很好地打乱(相同值的间隔很大)。因此,您可以使用以下算法对其进行改进:

  1. 0 = head1 = tail2 = fail。生成100个元素的数组:前45个元素为0,后45个元素为1,后10个元素为2
  2. 随机打乱你的数组,你可以使用方法std::random_shuffle()来做到这一点,或者你可以使用rand()编写你自己的打乱,详细的算法描述here
  3. 现在您有了一个包含很好混洗元素的数组,将其放入一个常量数组中,您就可以在您的函数中使用它了。

【讨论】:

  • 当然,我已经尝试根据算法的第一步来接近它,但是我被困在了剩下的部分。我不知道如何处理数组和 rand() 函数..
猜你喜欢
  • 2018-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-29
  • 1970-01-01
  • 2020-07-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多