你有一把宝剑。每使用一个宝石,有50%的概率会成功让宝剑升一级,50%的概率会失败。如果宝剑的级数大于等于5的话,那么失败会使得宝剑降1级。如果宝剑的级数小于5的话,失败没有效果。问题是:期望用多少个宝石可以让一把1级的宝剑升到9级?
题目源自 http://bbs.csdn.net/topics/370221989
f(2) = 2;
f(3) = 2;
f(4) = 2;
f(5) = 2;
f(6) = 0.5*1 + 0.5*(1+ f(5) + f(6) ) = 4;
f(7) = 0.5*1 + 0.5*(1+ f(6) + f(7) ) = 6;
f(8) = 0.5*1 + 0.5*(1+ f(7) + f(8) ) = 8;
f(9) = 0.5*1 + 0.5*(1+ f(8) + f(9) ) = 10;
所以, 共耗费36颗宝石。
模拟100万次的结果
bool isSuccess()
{
double n = (double) rand() / (RAND_MAX + 1.0);
return n > 0.5;
}
void main()
{
srand(time(NULL));
double sum = 0.0;
int times;
for (times = 0; times < 1000000; ++times) {
int level = 1;
int cost = 0;
while (level < 9) {
++cost;
if (isSuccess())
++level;
else {
if (level >= 5)
--level;
}
}
sum += cost;
}
cout <<sum / times<< endl;
}