鱼C论坛

 找回密码
 立即注册
查看: 1721|回复: 8

负基础小白想写出计算组合的代码

[复制链接]
发表于 2021-11-17 17:14:01 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
题目: 计算出符合条件的组合的概率
要求:
1.用户充值了999999元获得了双技能摇光项链,有两个格子,第一个格子必为高级技能,第二个格子可能是低级技能
2.使用1个重铸石可以对摇光项链进行一次洗练,会重置当前的两个技能
3.每次重置后每个格子必然都有技能
4.每次进行洗练时,至少有一个格子的技能会发生变化 (重点)
5.高级技能有45个,低级技能也有45个
6.每次洗练后,当次不会出现两个格子完全一样的情况
7.实用高级技能只有5个
8.用户最终结果需要洗练成从这5个实用高级技能中,出现两个高级技能(顺序无所谓),即结束

问:
1.符合上述要求8的概率
2.至多洗练多少次可以洗出符合要求8的项链(不考虑游戏后台暗改/伪随机)

P.S. 从XXXXX游戏中自己总结下来的实例(充值部分瞎掰的。。),先记录下来,回头慢慢研究写代码。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-11-17 17:48:05 | 显示全部楼层
数学题?组合公式?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-11-17 19:09:34 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-11-17 19:24:19 | 显示全部楼层
本帖最后由 白two 于 2021-11-17 19:58 编辑

个人见解,不确定对,如有错误,欢迎大佬指正

这就是一道数学题嘛
C25/C290
所以每次出现的组合一共有
90*80/2
需要的组合有
5*4/2
如果每个技能被选中的概率相等,不可能必中的吧
我的思路是这样的,设置一个自己能接受的概率,当然这只是概率是这样的,你如果够非,那也说不一定:
import math


def perm(n, m):
    if n == 0:
        return 1
    return (m)/(n)*perm(n-1, m-1)


skill = int(input('请输入技能总数:'))
skill_need = int(input('请输入需要的技能总个数:'))
skill_allowed = int(input('请输入允许存在的技能个数:'))
probability_need = 1 - float(input('请设置最低概率:'))
allow = perm(skill_allowed, skill)
# print(allow)
need = perm(skill_allowed, skill_need)
probability_fail = 1 - (need/allow)
times = int(math.log(probability_need, probability_fail))
print(f'至多抽{ times+1}次,有{1-probability_need}的概率抽中!')
运行结果:
请输入技能总数:90
请输入需要的技能总个数:5
请输入允许存在的技能个数:2
请设置最低概率:0.99
至多抽1843次,有0.99的概率抽中!

抽到不同技能概率不同的情况另说

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-11-18 11:00:07 | 显示全部楼层
白two 发表于 2021-11-17 19:24
个人见解,不确定对,如有错误,欢迎大佬指正

这就是一道数学题嘛

谢谢大佬的详细回复,我慢慢研究一下你的答案。。
突然想说一句容易让程序猿扔键盘的话:“客户需要改个需求,就一个小需求啊~”

哈哈哈哈。。。

打算把题目的要求4改成:“每次进行洗练时,每个格子的技能都会变化”。。。 我再根据你写的代码研究一下啊,感谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-11-18 13:34:26 | 显示全部楼层
自己的思考过程如下。
先不考虑那么多复杂条件,想最简单的:
总共有多少种组合:第一个格子有45种选择(只能高级技能),第二个格子不能和第一个格子相同,就相当于从90个球中取出两个球,取出了第一个球,那么第二个球只有89种可能了。所以是 45 * 89 = 4005种组合???
符合条件的有多少种组合: 5个实用技能里选2个, C上2下5 = 10
所以符合以上条件的概率为 10 / 4005 约等于0.025

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-11-18 14:07:03 | 显示全部楼层
把5#的要求补全,就是:

要求:
1.用户充值了999999元获得了双技能摇光项链,有两个格子,第一个格子必为高级技能,第二个格子可能是低级技能
2.使用1个重铸石可以对摇光项链进行一次洗练,会重置当前的两个技能
3.每次重置后每个格子必然都有技能
4.每次进行洗练时,每个格子的技能都会变化
5.高级技能有45个,低级技能也有45个
6.每次洗练后,当次不会出现两个格子完全一样的情况
7.实用高级技能只有5个
8.用户最终结果需要洗练成从这5个实用高级技能中,出现两个高级技能(顺序无所谓),即结束
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-11-18 15:36:37 | 显示全部楼层
如果将数量缩小一点,最终目的是列出所有组合:

要求:
1.用户充值了999999元获得了双技能摇光项链,有两个格子,第一个格子必为高级技能,第二个格子可能是低级技能
2.使用1个重铸石可以对摇光项链进行一次洗练,会重置当前的两个技能
3.每次重置后每个格子必然都有技能
4.每次进行洗练时,每个格子的技能都会变化
5.高级技能有8个,低级技能也有8个
6.每次洗练后,当次不会出现两个格子完全一样的情况
7.实用高级技能只有4个
8.用户最终结果需要洗练成从这5个实用高级技能中,出现两个高级技能(顺序无所谓),即结束
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-11-18 15:54:33 | 显示全部楼层
根据8#的题目要求,暂时写出的代码如下。。。
list1 = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H'] # 高级技能有8个
list2 = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'] # 低级技能有8个

for i in range(0, len(list1)):
    
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-12 18:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表