鱼C论坛

 找回密码
 立即注册
查看: 1285|回复: 2

三个勇士谁活到最后

[复制链接]
发表于 2021-10-8 21:17:37 | 显示全部楼层 |阅读模式

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

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

x
在瓦尼亚的土地上,亚伦、鲍勃和查理为他们中哪一个是有史以来最伟大的拼图家而争论。为了一劳永逸地结束这场争论,他们同意决斗到底。亚伦是一个糟糕的射手,命中目标的概率只有1/3。鲍勃稍微好一点,命中目标的概率是1/2。查理是一名专业的射手,从不失误。命中意味着杀死,被击中的人退出决斗。
为了弥补射击技术上的不公平,决定选手们轮流射击,先是亚伦,然后是鲍勃,然后是查理。循环会一直重复,直到有一个人站着。而那个人将作为有史以来最伟大的谜团而被人们铭记。
A.编写一个函数来模拟单个快照。它应该使用以下声明:无效射击(bool和targetAlive,double accuracy);这将通过生成一个介于0和1之间的随机数,模拟某人以给定的精度向TargetLive射击。如果随机数小于准确度,则会命中目标,并且应将TargetLive设置为false。
例如,如果Bob向Charlie开枪,这可以被调用为:
射击(Charlielive,0.5);
这里,charlieAlive是一个布尔变量,指示Charlie是否还活着。在进入步骤b之前,使用驱动程序测试您的功能。
B一个明显的策略是,每个人都要射向仍然活着的最准确的射手,因为这个射手是最致命的,并且有最好的反击机会。编写第二个名为startDuel的函数,该函数使用shot函数来使用此策略模拟整个决斗。它应该循环直到只剩下一个参赛者,根据射击的对象调用射击功能,并根据正确的目标和命中目标的概率调用射击功能。函数应该返回一个变量,指示谁赢得了决斗。
C在main函数中,在循环中调用startDuel函数1000次,记录每个参赛者获胜的次数。输出当每个人都使用最精确的射击策略时,每个参赛者获胜的概率。
D一个违反直觉的策略是Aaron故意错过他的第一枪。此后,每个人都会采用向活着的最准确的射手射击的策略。这一策略意味着Aaron肯定能活过第一轮,因为Bob和Charlie会互相射击。修改程序以适应此新策略,并输出每个参赛者的获胜概率。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-10-9 10:14:23 | 显示全部楼层

回帖奖励 +20 鱼币

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

使用道具 举报

发表于 2021-10-9 10:18:12 | 显示全部楼层

仔细阅读完了,挺有趣的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-22 13:41

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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