学习了两个算法:
1、除法速算:
http://blog.csdn.net/ZhengKarl/archive/2010/05/15/5596154.aspx
2、约瑟夫环的数学算法:
http://blog.csdn.net/ZhengKarl/archive/2010/05/15/5596118.aspx
为什么x'=x+k
序列 1 : 1, 2, 3, 4, …, n-2, n-1, n
此时出队列的第一个人,位置为 k ,号码肯定是 m%n 。这个应该没有问题,也就是取余操作使得数组类似能够有循环的功能。
此时序列 2 : 1, 2, 3, 4, … k-1, k+1, …, n-2, n-1, n
此时 k出队列,序列2中为n-1个人了。
根据序列 2 ,得到序列 3 :
k+1, k+2, k+3, …, n-2, n-1, n, 1, 2, 3,…, k-2, k-1
从序列2得到序列3很简单,也就是将k+1作为开始,然后将1连到n的后面,其实只是位置的不同,但是本质两个序列是一样的。所以同样,这里也是n-1个元素。
序列3可以映射得到序列4:
1, 2, 3, 4, …, 5, 6, 7, 8, …, n-2, n-1
1 对应k+1 2对应k+2……x对应k+x(如上面对应转换)
所以x`=x+k
但当x` 所以推出来:x'=(x+k)%n
读书的目的是为了什么? 读书的时候某老师说:读书目的是为了增长知识,弄懂别人没有弄懂的东西.....
现在想想也是,程序员的乐趣就在于和X女一样,工作完成了,身心愉快.....
程序员的乐趣在于不断学习新的技术,读书的目的是为了增长知识,弄懂别人没有弄懂的东西.....