投掷硬币,直到一侧连续下降 3 次

Posted

技术标签:

【中文标题】投掷硬币,直到一侧连续下降 3 次【英文标题】:Coin is thrown until one side falls three times in a row 【发布时间】:2018-05-22 06:42:37 【问题描述】:

我是编程新手,但对一项任务有疑问:

投掷硬币,直到一侧连续掉落 3 次

int throwing = 0;

int tail=0;
int head=0;
int counter= 0;
Random rnd = new Random();

do

    throwing = rnd.Next(1, 3);
    Console.WriteLine(bacanje);
    counter++;

    if (throwing == 1)
    
        tail++;
    
    else if (throwing == 2)
    
        head++;
    

 while (tail != 3 && head!= 3);

所以我的问题是它不想连续 3 次,当结果如下时程序退出:头,头,尾,头。它应该是:头,头,头。

不确定代码中要更改什么,如果有人有任何建议,我将不胜感激。谢谢

【问题讨论】:

作为旁注,虽然你所做的是正确的,但通常在 c# 中你“接受”第一个数字是 0 并且你接受它......rnd.Next(2) 然后if (throwing == 0) else (不需要第二个ifelse 就足够了...正如拉丁人所说的tertium non datur,没有第三个可能的结果) 【参考方案1】:

如果 throw 发生变化,您永远不会为另一个重置计数器,您只需将另一个重置为 0

if (throwing == 1)

    tail++;
    head = 0;

else if (throwing == 2)

    head++;
    tail = 0;

【讨论】:

while((tail + head) != 3); 不太喜欢这种微优化,它不会使代码更清晰,而且可能不会加快速度起来。

以上是关于投掷硬币,直到一侧连续下降 3 次的主要内容,如果未能解决你的问题,请参考以下文章

硬币概率和统计问题

模拟投掷硬币100次

平均要抛多少次硬币,才能出现连续两次正面向上?

hihocoder [Offer收割]编程练习赛14 投掷硬币

抛硬币问题

科学家构建“赌徒悖论”大脑网络模型