游戏公司笔试题

weqi 2003-12-01 09:24:03
现在需要设置一个装备改良系统,改良使用特殊的物品(龙珠)和装备进行合成,合成成功,则装备的品质上升。
装备的品质,由低至高: 普通,良品,上品,精品,极品
如果是普通升良品,和良品升上品时,失败没有惩罚。
如果是上品升精品,和精品升极品,失败的时候,50%的机会,品质会下降一个档次。
无论合成是否成功,龙珠都消失。
要求计算良品升上品,上品升精品,精品升极品的合理的成功几率。满足:
1. 从良品开始,平均升级到极品,需要耗费20颗龙珠
2. 一般情况下,随着品质逐步提高,成功几率下降
3. 满足上文提及的其它的条件。
...全文
307 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhushizu 2003-12-07
  • 打赏
  • 举报
回复
概率率没学好。-_-!!
amdcwf 2003-12-07
  • 打赏
  • 举报
回复
不是的,我是说使得1/(1-P)的值为整数
P为成功的概率
timiil 2003-12-06
  • 打赏
  • 举报
回复
晕~ 概率本就是小于1的小数,何来整数一说?
timiil 2003-12-06
  • 打赏
  • 举报
回复
符合题目条件的解有无穷个。
amdcwf 2003-12-06
  • 打赏
  • 举报
回复
如果要求是整数的话
那个只有有限个解了
jingfeng198 2003-12-06
  • 打赏
  • 举报
回复
我好像见过这个题目,答案是50% 25% 20% ,应该没有记错的
timiil 2003-12-06
  • 打赏
  • 举报
回复
有趣的题目。初步想了下,觉得不用太复杂吧?
小弟的思路是这样的。
装备的初始状况是“良品”,设mLevel,值为1,目标是“极品”,即是mLevel=4.
此间共升级3此,设概率数组p(3) , 为了建议效果,我们必须多次模拟升级的过程,由概率论可知,试验次数越多,越符合概率分布。

Private Function Stat(ByVal p() As Double, ByVal TestCount As Long) As Double '通过多次模拟测试,得出平均需要的龙珠数
Dim mCount, mTotal As Long, mLevel As Byte
For mCount = 1 To TestCount
mLevel = 1 '每次测试都把当前级别复位
Do
If Rnd() < p(mLevel) Then '按概率算能否升级
mLevel += 1
ElseIf mLevel > 1 And Rnd() < 0.5 Then '若升级失败且为1级以上,则算是否需要降级
mLevel -= 1
End If
mTotal += 1
Loop Until mLevel = 4
Next
Return mTotal / TestCount
End Function

上述函数即模拟题目所述的升级过程,首参数为概率数组,次参数为试验次数。(代码为Basic.NET)

大家可以用0.9,0.8,0.7 这3个概率开始试,试验次数建议为10万, 得出大概是4.2左右。
实际使用的话不用太费力即可得到1大堆的概率组合了。
如0.7,0.45,0.15就比较符合题目要求。 这是手动修正求p这个概率数组; 即使要自动计算,问题也不大 ,参考玄切法或二分法的算法调用上述函数并不断修正就可以了。
amdcwf 2003-12-05
  • 打赏
  • 举报
回复
有点笔误,纠正如下:

这道题其实考的是我们应用《概率论与数理统计》的能力
其实是道离散型的数据理统计问题

令x1代表普通到良品时耗费的龙珠个数的随机变量,
x2,代表良品到上品.........................
E(x1)=1/(1-p1);
E(x2)=1/(1-p2);


令x3,代表上到精
则E(x3)=E(x2)*(1/2)+1/(1-p3);
令x4,代表精到极
则E(x4)=E(x3)*(1/2)+1/(1-p4);
令随机变量X=x1+x2+x3+x4;
其中p1,p2,p3,p4是各升级成功的机率

又x1,x2,x3,x4是独立同分布的故依题意有

E(X)=E(x1)+E(x2)+E(x3)+E(x4)=
1/(1-p1)+9/(4(1-p2))+3/(2(1-p3))+1/(1-p4)=20;
由于只有约束条件p1>p2>p3>p4,
而没有给出它们之间的关系所以就只有用机器来列举所有合适的解了
amdcwf 2003-12-05
  • 打赏
  • 举报
回复
这道题其实考的是我们应用《概率论与数理统计》的能力
其实是道离散型的数据理统计问题

令x1代表普通到良品时耗费的龙珠个数的随机变量,
x2,代表良品到上品.........................
E(x1)=1/(1-p1);
E(x2)=1/(1-p2);
令随机变量X=x1+x2

令x3,代表上到精
则E(x3)=E(x2)*(1/2)+1/(1-p3);
令x4,代表精到极
则E(x4)=E(x3)*(1/2)+1/(1-p4);
其中p1,p2,p3,p4是各升级成功的机率
又x1,x2,x3,x4是独立同分布的故依题意有

E(X)=E(x1)+E(x2)+E(x3)+E(x4)=
1/(1-p1)+9/(4(1-p2))+3/(2(1-p3))+1/(1-p4)=20;
由于只有约束条件p1>p2>p3>p4,
而没有给出它们之间的关系所以就只有用机器来列举所有合适的解了










zhangjyr 2003-12-05
  • 打赏
  • 举报
回复
哈哈,我觉得排方程似乎算不大出来,如果简单的凑一下60%,40%,20%的比率应该差不多吧
Bluclyf 2003-12-05
  • 打赏
  • 举报
回复
我大概看了看,算了算,提出一点思路可能不对,请多包含。首先根据题目列出表达式,我发现是一个无穷多项式。然后求他的极限将式子化减。。。然后解放程。我只作到“精品”就没精神再算下去了,我感觉很麻烦,不是一时半会能算出的。。。(我特笨)
5956 2003-12-04
  • 打赏
  • 举报
回复
up
ThenLong 2003-12-04
  • 打赏
  • 举报
回复
解方程
wbel 2003-12-04
  • 打赏
  • 举报
回复
我写的代码,没有考虑这个条件:如果是上品升精品,和精品升极品,失败的时候,50%的机会,品质会下降一个档次。

还有错误,没有找出来,看得我烦了。

import java.util.Random;
public class Update
{
int hasUsed=0;//已用龙珠
int Num=10;
int fine[],topgrade[],finished[],masterwork[];
Random rd=new Random();
int result[]=new int[20];
boolean finetrue=true;
boolean topgradetrue=true;
boolean finishedtrue=true;
boolean masterworktrue=true;
public static void main(String args[])
{
Update update=new Update();
update.init();
update.calc();
}
public void init(){
fine=new int[Num];
topgrade=new int[Num];
finished=new int[Num];
masterwork=new int[Num];
for(int i=0;i<Num;i++)
{
fine[i]=rd.nextInt(2);
topgrade[i]=rd.nextInt(3);
finished[i]=rd.nextInt(5);
masterwork[i]=rd.nextInt(10);
}
for(int i=0;i<20;i++)
{
result[i]=0;
}
fine[1]=1;
topgrade[2]=2;
finished[4]=4;
masterwork[9]=9;
}
public void calc(){

for(int k=0;k<100;k++){
hasUsed=0;
finetrue=topgradetrue=finishedtrue=masterworktrue=true;
for(int i=0;i<Num;i++)
{
if(fine[i]==1|finetrue){
System.out.println("升级到量品所用龙珠"+(i+1));
finetrue=false;
hasUsed=hasUsed+i+1;
}
if(topgrade[i]==2|topgradetrue){
System.out.println("升级到上品所用龙珠"+(i+1));
topgradetrue=false;
hasUsed=hasUsed+i+1;
}
if(finished[i]==4|finishedtrue){
System.out.println("升级到精品所用龙珠"+(i+1));
finishedtrue=false;
hasUsed=hasUsed+i+1;
}
if(masterwork[i]==9|masterworktrue){
System.out.println("升级到极品所用龙珠"+(i+1));
masterworktrue=false;
hasUsed=hasUsed+i+1;
}

}
System.out.println("升级到极品全部龙珠"+hasUsed);
result[hasUsed-1]=result[hasUsed-1]+1;
}
for(int j=0;j<=20;j++)
{

System.out.println(j+":"+result[j]);
}
}
}
Bluclyf 2003-12-04
  • 打赏
  • 举报
回复
up
answerear 2003-12-03
  • 打赏
  • 举报
回复
up
LunTanZeng 2003-12-03
  • 打赏
  • 举报
回复
upup
wcfish 2003-12-03
  • 打赏
  • 举报
回复
给多长时间作出?只写算法就行了吧?
dengsf 2003-12-02
  • 打赏
  • 举报
回复
是要笔算吗?
如果笔算并且得出比较精确的解~好像很麻烦啊。

我就只想到写个程序,用户输入各种概率,程序回答那种转换所需的 平均龙珠数。用户反复调整直到合适为止。
wbel 2003-12-02
  • 打赏
  • 举报
回复
gz
加载更多回复(3)

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧