再用大白话解释一下总数124的算法
5个随机数的大小排列顺序对应24种情况,这是显而易见的,但这只是大小顺序提供的信息,而5个随机数本身的数值信息还没充分利用
总数52的算法只是选取了最小值或第二小值做为待猜数,这就限制了总数的数值,同时也说明待猜数的选择是提高总数的关键问题
C爪机留名C的算法涉及到三层数值赋值
原始的124个数从小到大用冠y值表示
y(0)=0,y(1)=1,y(2)=2,…,y(123)=123
5个随机数从小到大为abcde
从小到大用冠x值表示
x(0)=a,x(1)=b,x(2)=c,x(3)=d,x(4)=e
计算(a+b+c+d+e)mod5=n
由此选取x(n)对应的数值做为待猜数
假设n=2,也就是将x(2)=c做为待猜数
再计算(a+b+d+e)mod5=m
再计算(5-m)mod5=p
再将除去abde的120个数按从小到大排列用冠z数值表示
z(0),z(1),z(2),…,z(119)
那么一定有c=z(5k+p),k=0,1,2,…,23
当然k值完全可以用abde的排列顺序表示
用实例计算
比如a=2,b=13,c=14,d=60,e=100
即x(0)=2,x(1)=13,x(2)=14,x(3)=60,x(4)=100
n=(2+13+14+60+100)mod5=4
x(4)=e=100,取e=100做为待猜数
m=(2+13+14+60)mod5=4
p=(5-4)mod5=1
除去a=2,b=13,c=14,d=60得到冠z数列
z(0)=0,z(1)=1,z(2)=3,…,z(11)=12,z(12)=15,…,z(56)=59,z(57)=61,…,z(95)=99,z(96)=100,z(97)=101,…,z(119)=123
最后将a=2,b=13,c=14,d=60的排列顺序对应k=(96-1)/5=19即可。
C爪机留名C的逻辑真是太强悍了