用累加器计算抛硬币次数的平均值



这是我正在处理的问题

使用循环和rand(),模拟抛硬币10000次计算正面和反面的差值。在另一个循环中包装上述两行,循环1000次。使用累加器将差异相加计算并显示正面和反面的平均差值

累加器没有按我想要的方式工作?非常一个c++新手,作为家庭作业,哈哈。有人来帮忙吗?

为什么我使用rand()????作业的第二部分让我们使用较新的方法(mt19937),只是试图在继续之前先解决这一点。

#include <iostream>
using namespace std;
int main() {

int heads = 0, tails = 0, num, total = 0;
srand(time(NULL));
for (int h = 0; h < 1000; h++) // Loop Coin Toss
{
for (int i = 0; i < 10000; i++) // COIN TOSS
{
int random = rand() % 2;
if (random == 0)
{
heads++;
}
else 
{
tails++;
}
}
cout << abs((heads++ - tails++));
cin >> num;
total =+ num;
}
cout << "The average distance between is " << total / 1000 << endl;
cin.get();
return 0;
}

对于您的代码,您从来没有实际保存过所需的值。还有一些不必要的运算会让你的结果不准确。这一行:
cout << abs((heads++ - tails++));增加了头和尾变量,但它们不应该这样。

接下来的两行没有意义。为什么需要从用户那里获得一个数字,为什么要将这个数字添加到总数中?

最后,这个表达式:total / 1000执行整数除法,这会使你的结果出错。

这些是我能在你的代码中发现的直接问题。

接下来,我们继续讨论你的问题陈述。什么是累加器?在我看来,你是要去上课吗?它也让我想起了std::accumulate,但如果这是你想要的,它会说得更多。同样,std::accumulate将需要存储结果,这对于这个程序来说并不是必需的。下面的代码执行主要任务,即运行必要的模拟并跟踪结果。

你会注意到我没有费心去数反面。因为模拟的总次数是提前知道的,所以大平均值也会被计算出来。

#include <cmath>
#include <iostream>
#include <random>
int flip_coin() {
static std::mt19937 prng(std::random_device{}());
static std::uniform_int_distribution<int> flip(0, 1);
return flip(prng);
}
int main() {
constexpr int tosses = 10'000;
constexpr int simulations = 1'000;
double diffAvg = 0.0;
for (int i = 0; i < simulations; ++i) {
int heads = 0;
for (int j = 0; j < tosses; ++j) {
if (flip_coin()) {
++heads;
}
}
diffAvg +=
std::abs(heads - (tosses - heads)) / static_cast<double>(simulations);
}
std::cout << "The average heads/tails diff is: " << diffAvg << 'n';
return 0;
}

我最终做的事情似乎适用于**THIS VERSION WITH RAND()(稍后使用新方法)**

#include <iostream>
using namespace std;
int main() 
{
int heads = 0, tails = 0, total = 0;
srand(time(NULL));
for (int h = 0; h < 1000; h++) // Loop Coin Toss
{
{
for (int i = 0; i < 10000; ++i) // COIN TOSS
if (rand() % 2 == 0)
++heads;
else
++tails;
total += abs(heads - tails);
}
}
cout << "The average distance between is " << total / 1000.0 << 'n';
cin.get();
return 0;

}

最新更新