这里就没什么好说的了,stdlib与time都是随机数需要的库
_mem是记忆数组,剩下四个整形分别是回合,胜场,平场,负场
_mem[i][m]表示对手出i, 我们出j的状态
_mem[i][m]._all表示这个状态一共经历了几次
_mem[i][m]._list[k]表示这个状态下对手出k出了几次
以上是初始化部分,GenRand是随机数撒种,GenMem在上一篇博客也说过
因为模数不能为零,而又要对后面影响不大,所以选择n=3, a1=a2=a3=1
这个没啥用,是我调试的时候用的
这个实际上也没啥用,解释一下玩法
输入对手的决策,因为后续可以改输入,还可以汉化
所以我单拎了一个函数,或者说方法
这里就是重点了,通过(rand mod k) +1来模拟对手的选择
k在1-a1间,我们认为对手会出1,我们就出2
其他类推
因为我们的区间是
1——a1,a1——a1+a2,a1+a2——n
而不是
1——a1,1——a2,1——a3
(这样的话1到底算在哪里?)
所以需要一个add来记录上次排到哪里了
然后因为每个判断后面都有return,所以不用重复判断
即从第一个判断出来后,我们就认为k>a1
同样,从第二个判断出来后,我们就认为k>a1+a2
所以肯定在第三个区间
这就没啥好说的了,输出赢还是输还是平
有了上面的决策函数,这里主要就是纪律上次的决策,从记忆数组里取(Decision)
然后刷新后再放回去
主程序就一个一个调就行了
好了,差不多讲完了
如果有 错误/优化/疑问 欢迎提出
WeChatwxid_ffe28hxx677f32
(其实是我想认识大佬)
——by 于斯为盛
© 版权声明
本网站上的所有资源均来源于本网站,所有网址和文章版权均归原作者所有。如有侵权行为,请将相关证明发送至以下电子邮件地址:dxsen@qq.com