1. 技能1的等级为a,技能2的等级为b,技能3的等级为c,技能1的伤害为5a(1+0.1b)(1+0.2c),一共有45技能点,请问如何分配给3个技能,使技能1的伤害最高。
其实是给定条件a+b+c=45,求y=5a(1+0.1b)(1+0.2c)的极值。
通用解法如下:构造函数f(a,b,c)=5a(1+0.1b)(1+0.2c)+n(a+b+c-45),其中n为常数,分别对a、b、c求导,导数均为0的情况下,对应的(a,b,c)即为极值点。
5(1+0.1b)(1+0.2c)+n = 0
0.5a(1+0.2c)+n = 0
a(1+0.1b)+n = 0
a+b+c = 45
根据这4个等式,即可求得a=20、b=10、c=15,技能1的最大伤害为800。
2. 抽卡问题,每次抽卡20%概率抽到橙卡,如果连续9次没有抽到橙卡,则下一次必定为橙卡,问单抽与十连抽,抽到橙卡的概率为多少?
2023.09.03更新
目前回过头再看这道题目,可能有点问题。在抽卡次数无穷大的情况下,单抽与十连抽,两者的概率应该是一致的。可以理解为每次抽卡,如果没有抽到橙卡,就有1/9的橙卡价值保存并累加起来,如果抽到橙卡,就会清空隐藏价值。一旦连续9次没有抽到橙卡,隐藏价值就会显现出来。而十连抽与单抽的区别,仅仅是十连抽能更加频繁的显现隐藏价值而已。在抽卡数量非常大时,两者抽到橙卡的平均概率没有区别。
以10抽为一个间隔划分,可以计算出抽到橙卡的期望概率为21.074%
十连抽逻辑(个人理解):一次抽10张卡,必定有1张是橙卡,其余9张均有20%概率为橙卡。
则抽到橙卡的概率=(1+0.2*9)/10=28%
单抽的概率还不清楚该如何计算(路过的大佬还请指导一下),不过通过Python编码将两种抽卡的情况都模拟了百万次,单抽概率为22.4%,十连抽为28%,相关代码和结果如下:
这里单抽和十连抽的逻辑还不确定是否正确,按照自己理解的逻辑编写的代码,测试出来十连抽的概率高一些,而且都比初始的20%概率略高,与预期一致。
import random
chouka_time = 10000000 #抽卡次数
#十连抽函数
def chou_10() :
num = 1 #必定有1张橙卡,初始值为1
for i in range(9):
rd = random.random()
if rd < 0.2:
num = num + 1
return num
#单抽函数
lianhei = [0] #记录连续未抽到橙卡次数
def chou():
num = 0 #记录抽到橙卡数量
rd = random.random()
if lianhei[0] >= 9 or rd < 0.2:
num = num + 1
lianhei[0] = 0
else:
lianhei[0] = lianhei[0] + 1
return num
chengka = 0
for i in range(chouka_time):
chengka = chengka + chou()
print("抽卡",chouka_time,"次:",chengka,"张橙卡,橙卡概率:",chengka/chouka_time)
chengka = 0
for i in range(chouka_time//10):
chengka = chengka + chou_10()
print("十连抽卡",chouka_time//10,"次:",chengka,"张橙卡,橙卡概率:",chengka/chouka_time)
结果如下:
3. 知道一款游戏的月流水、在线玩家总数和消费玩家数量,问消费玩家的分布。
个人理解应该是按照正态分布来计算,横坐标为消费金额,纵坐标为对应玩家数量。正态分布的平均值应该就是流水除以消费玩家数量得出的单个玩家平均消费金额。正态分布在大于0这一侧的概率应该就是消费玩家数量占玩家总数的比例,进而就可以推导出这个正态分布的函数。