所以,我在这里遇到一些用C ++实现这个数学问题的问题。
假设我的游戏涉及两个随机生成的结果,这些结果可能是胜负。
此处解释了算法:http://imageshack.us/f/98/terriblyexplained.png/
例如,如果比赛的前六轮获胜,输掉,赢,输,输,输,赢得第7轮的几率为78.90625%,输掉的几率为21.09375%
如何将此场景实现到公式中,并将其实现为可以在C ++中运行的算法?
答案 0 :(得分:2)
#include <iostream>
#include <string>
int main()
{
double WinChance = 0.5;
double LossChance = 0.5;
std::string result;
while(std::cin >> result)
{
if(result == "Win")
{
WinChance /= 2.0;
LossChance = 1.0 - WinChance;
}
else
{
LossChance /= 2.0;
WinChance = 1.0 - LossChance;
}
}
std::cout << "Winning Chance next round is " << WinChance * 100.0 << std::endl;
std::cout << "Losing Chance next round is " << LossChance * 100.0 << std::endl;
}
您可以根据当前WinChance
随机生成结果,而不是输入结果。
希望这会有所帮助。
答案 1 :(得分:1)
所以你知道确切的数学程序,你的问题是什么?
为了不分别存储输赢概率:
double nextWinProbability(double winProb, bool lastWasWin)
{
if (lastWasWin) {
return winProb / 2;
}
else {
return 50 + winProb / 2; // = 100 - loseProb / 2 = 100 - (100 - winProb) / 2
}
}
您也可以将概率表示为不是百分比,而是表示介于0.0和1.0之间的值。