发布时间:2013-11-08 21:26:16
Josephus是公元1世纪的著名历史学家,相传在一次战役中他和另外几个人被围困在山洞里,
他们宁死不屈,决定站成一圈,每次数到三个人就杀一个,直到全部死光为止。Josephus和他的一
个朋友不想死,于是串通好了站在适当的位置上,最后只剩下他们俩的时候这个游戏就停止了。如
果一开始的人数为N,每次数到M个人就杀一个,那么要想不死应该站在什么位置呢?这个问题比较
复杂,[具体数学]的1.3节研究了Josephus问题的解,有兴趣的读者可以参考。现在我们做个比较
简单的练习,用链表模拟Josephus他们玩的这个游戏,N和M作为命令行参数传入,每个人的编号依
次是1~N,打印每次被杀者的编号,打印最后一个幸存者的编号。
......【阅读全文】
发布时间:2013-12-18 23:03:56
通过交换a,b中的元素,是的a序列的和 与 b序列的和 之间的差最小
比如a = [1, 2, 3, 4, 5] ,b = [6, 7, 8, 9, 10]
那么把b中一些大的交换到a去,使得他们之间的差值更小
思路:
假设a的和为sa,b的和为sb,那么他们的差值
diff = abs(sa-sb);
为了缩小差距,那么需要交换两个值,如果这两个值最接近diff/2,那么
交换之后diff就为0了,所以我们要尽量找到两个差值为diff/2的元素,
进行交换即可,再递归即可
......【阅读全文】