Boss掉落物品问题

原问题是这样的:

玩某游戏中,一个Boss死亡之后会随机掉落物品,一共有四种物品可能会掉落,Boss每次死亡之后都会掉落一种物品,四种物品掉落的概率完全相同。

现在需要收集其该Boss掉落的四件物品,完成某项任务。问:平均要杀死该Boss多少次才能凑满全部4个物品。

 

 

该问题实际上就是求boss掉落全部四个物品的数学期望,数学期望为值和概率之积的全和。

s=4*p(4) + 5*p(5) + … + n*p(n);

 

问题的关键就在于如何求解p(n);

 

很明显,p(n)的值为刚好在第n次杀死boss的时候掉落出最后一件物品,之前的n-1次都是掉落其他3种物品,这样才符合题意。

于是:1  其中ps表示“挑出的3种物品在前n-1个事件发生时候的出现的可能排列数”,他必须满足1、三种物品必须全部出现;2、不能重复计算出现过的情况;

于是讨论这个子问题:前n-1个事件中,恰好出现三种物品的排列数

有三种可能:

1、全部是一种物品:   共3种排列

2、恰好由两种物品构成: 共2

3、恰好有三种物品构成 : 3

 

第三种情况恰好就是我们子问题的解

 

所以:4

 

 

然后利用分项错开计算。计算无穷小数列的值。

 

最后可得:期望值为8.33左右

 

2010033100575821.jpg

 

 

附上代码:

 

ContractedBlock.gif ExpandedBlockStart.gif 代码
 
   
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
// 一个BOSS掉4个装备,每杀死次BOSS都只掉1个,
// 4个装备掉的几率相等,问同一玩家要凑齐4个装备平均要杀多少次BOSS?

namespace Boss
{
class Program
{
static Random rd = new Random();
static bool test( int [] a)
{
for ( int i = 0 ; i < a.Length; i ++ )
{
if (a[i] != 1 )
return true ;
}
return false ;
}
static int sim()
{
int [] a = { 0 , 0 , 0 , 0 };
int i = 0 ;
while (test(a))
{
a[rd.Next(
0 , 4 )] = 1 ;
i
++ ;
}
return i;
}
static void boss1()
{
double sum = 0 , summ = 0 ;
int COUNT = 1000000 ;
for ( int j = 0 ; j < 10 ; j ++ )
{
for ( int i = 0 ; i < COUNT; i ++ )
{
sum
+= sim();
}
sum
/= COUNT;
summ
+= sum;
}
Console.WriteLine(
" 平均结果是:{0}; " , summ / 10 );
}


static void boss3()
{
double s1 = 27.0 / 64 , s2 = 3.0 / 8 , s3 = 3.0 / 64 ;
double tmp = 4 * (s1 - s2 + s3),s = 0 ;
for ( int i = 5 ;tmp > 0.00001 ;i ++ )
{
s
+= tmp;
s1
= s1 * 3 / 4 ;
s2
= s2 / 2 ;
s3
= s3 / 4 ;
tmp
= i * (s1 - s2 + s3);
}
Console.WriteLine(
" 计算和:{0} " , s);
}
static void Main( string [] args)
{
Console.WriteLine(
" 模拟输出: " );
boss1();
Console.WriteLine(
" 计算输出: " );
boss3();
}
}
}

 

 

 

转载于:https://www.cnblogs.com/hanyulcf/archive/2010/03/31/objectsofboss.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值