基本问题在上面,只是一个简单的例子来说明:
假设我想要一个6面骰子,直到我得到一个4然后再玩这个“游戏”10次。
现在我想获得一个非常基本的概率分布,即需要多少次投掷才能得到4。在2场比赛中,我只需要1次投球,4场比赛3次投球,3场比赛4次投球,以及1场比赛78投掷。所以在比赛之前我从未真正知道需要多少次投球,这场比赛可以无休止地进行
为了简化记录保存,我想使用一个向量,其中向量的位置/索引表示获得4所需的抛出次数,而位置的值表示需要多少次抛出的频率。所以前面例子中的这样一个矢量看起来很......像这样:{0,2,0,4,3,0,[另外72个零],1}
我将如何在C ++中编写代码?
(我很确定以前必须提出类似的问题,但找不到匹配的问题。而且我刚刚开始学习C ++,所以如果他们不是,请不要调用非常技术性的概念。需要了解解决方案。)
C++-Code/Pseudocode
vector<int> recordvec = {0};
for (1 to 10){
game();
recordvec[game.throwsneededtowin()]=recordvec[game.throwsneededtowin()] +1
//How to make sure that I don't get an out-of-range error here if game.throwsneededtowin() is e.g. 1464?
}
print recordvec
答案 0 :(得分:0)
在OP请求时更改为std::vector
#include <iostream>
#include <vector>
#include <ctime>
int main()
{
std::vector<int> stats;
std::srand(static_cast<unsigned int>(std::time(0)));
for (int i = 0; i < 10; ++i)
{
int is4;
size_t throws = 0;
do
{
is4 = int(std::rand() % 6 + 1 == 4);
if (throws < stats.size())
stats[throws] += is4;
else
stats.push_back(is4);
++throws;
}
while (!is4);
}
for (auto const &stat : stats)
std::cout << stat << " ";
std::cout << std::endl;
system("pause");
return 0;
}