gpt4 book ai didi

C++抛硬币程序

转载 作者:行者123 更新时间:2023-11-28 05:38:26 27 4
gpt4 key购买 nike

我试图编写一个 C++ 程序来计算我连续抛掷了多少次相同类型的硬币,但结果很奇怪。我试着扔了 1,000,000 次,但我没有得到比 15 次更多的“相同类型的连续抛掷”。我用较少的抛掷次数 (5-20) 测试了它,它似乎工作正常,除了我也没有连续获得超过 15 个相同类型。

#include <iostream>
#include <ctime>

#define LOOP 1000000//how many times do I toss a coin

int main()
{
int maxTails = 0, maxHeads = 0, currentTails = 0, currentHeads = 0, totalHeads = 0, totalTails = 0;

int totalMax = 0;//highest amount of "in a row" out of all iterations

bool heads = false;//last toss

srand(time(0));

for (int x = 0; x < 100; ++x) {//this is to increase the amount of how many times I want to toss a coin LOOP times
for (int i = 0; i < LOOP; ++i)//tosses a coin LOOP times
{
if (rand() % 2 == 0)// heads
{
if (heads == false)//if last toss was tails I check if the "in a row" for it was more than the current maximum
{
if (currentTails > maxTails) maxTails = currentTails;
currentTails = 0;
currentHeads = 0;
heads = true;
}
currentHeads++;
totalHeads++;
if (currentHeads > maxHeads) maxHeads = currentHeads;
}
else//tails
{
if (heads == true)
{
if (currentHeads > maxHeads) maxHeads = currentHeads;
currentHeads = 0;
currentTails = 0;
heads = false;
}
currentTails++;
totalTails++;
if (currentTails > maxTails) maxTails = currentTails;
}
}

if (maxTails > totalMax) totalMax = maxTails;//totalMax is the maximum "in a row" of either tails or heads
if (maxHeads > totalMax) totalMax = maxHeads;

std::cout << "Throws: " << LOOP << ", Total heads: " << totalHeads << ", Total tails: " << totalTails << ", Maximum heads: " << maxHeads << ", Maximum tails: " << maxTails << std::endl;//writes all the info
//std::cout << "Iteration: " << x + 1 << ", Max: " << totalMax << std::endl;
maxTails = maxHeads = currentHeads = currentTails = totalHeads = totalTails = 0;
}
std::cout << "Max: " << totalMax << std::endl;

system("pause");
return 0;
}

我在互联网上读到,如果您抛硬币 1,000,000 次,连续获得 20 次正面朝上的概率约为 38%,但我的程序运行方式不同。我的代码有问题还是 rand() 函数有问题?

最佳答案

阅读@BathSheba 评论。期望与您现在得到的不同的输出是不准确的。

为了简单起见以便读者可以根据需要进行调试,这是您的代码的工作版本:

#include <iostream>
#include <ctime>

#define LOOP 1000000 //how many times do I toss a coin

int main()
{
int maxTails = 0;
int maxHeads = 0;
int currentTotalTails = 0;
int currentTotalHeads = 0;

srand(time(NULL));

for (int i = 0; i < LOOP; ++i) //tosses a coin LOOP times
{
if (rand() % 2 == 0)// heads
{
currentTotalHeads++;
currentTotalTails = 0;

if (currentTotalHeads > maxHeads)
maxHeads = currentTotalHeads;

}
else // tails
{
currentTotalTails++;
currentTotalHeads = 0;

if (currentTotalTails > maxTails)
maxTails = currentTotalTails;
}
}

std::cout << "Max Heads in a row: " << maxHeads << std::endl;
std::cout << "Max Tails in a row: " << maxTails << std::endl;

system("pause");
return 0;
}

关于C++抛硬币程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37709906/

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