並附上C++的測試程式執行結果:
猜拳次數 = 100000000,
第一關勝利數 = 49997199, 使用硬幣數 = 74991857,
第一關失敗數 = 50002801, 使用硬幣數 = 75000158,
第二關失敗數 = 25000910, 使用硬幣數 = 74999844,
勝場數 = 24996289, 勝場使用硬幣數 = 74981395,
敗場總數 = 75003711
使用硬幣總數 = 224981397
硬幣總數/勝場數 = 9.000592
程式原始碼:
#include <stdlib.h>
#include <time.h>
#define ROCK 0
#define PAPER 1
#define SCISSOR 2
int main(int argc, char* argv[])
{
int numPlay, result, finishFlag, coin;
int numWin = 0, numLose = 0, totalCoin = 0,
winCoin = 0, loseCoin1 = 0, loseCoin2 = 0,
numLose1 = 0, numLose2 = 0, numWin1 = 0, winCoin1 = 0;
srand(time(NULL));
for (numPlay = 0; numPlay < 100000000; ++numPlay) {
finishFlag = coin = 0;
do {
++coin; result = rand()%3;
if (result == ROCK) {
++numWin1; winCoin1 += coin;
do {
++coin; result = rand()%3;
if (result == ROCK) {
++numWin;
winCoin += coin;
finishFlag = 1;
}
else if (result == SCISSOR) {
++numLose;
loseCoin2 += coin;
++numLose2;
finishFlag = 1;
}
} while (finishFlag == 0);
}
else if (result == SCISSOR) {
++numLose;
finishFlag = 1;
loseCoin1 += coin;
++numLose1;
}
} while (finishFlag == 0);
totalCoin += coin;
}
printf("猜拳次數 = %d,\n第一關勝利數 = %d, 使用硬幣數 = %d,\n第一關失敗數 = %d, 使用硬幣數 = %d,\n第二關失敗數 = %d, 使用硬幣數 = %d,\n勝場數 = %d, 勝場使用硬幣數 = %d,\n敗場總數 = %d\n使用硬幣總數 = %d\n硬幣總數/勝場數 = %f\n",
numPlay, numWin1, winCoin1, numLose1, loseCoin1, numLose2, loseCoin2, numWin, winCoin, numLose, totalCoin, (float)totalCoin / (float)numWin);
return 0;
}
|