博客开篇:几道思考题

一。

题干:在一个超级大操场上,站着123456个士兵,分别是1号、2号、3号……123456号。将军叫道:“单号的走开!”于是单号的全走光,剩下的人又按从小到大重新生成新编号。将军又叫道:“单号的走开!”然后重新生成的单号又全部走开。如此重复若干次,最后只剩下一人。
问:这个人最初的号数是多少?

 

思考:

1.先不管操场上一共有多少士兵,考虑最简单的情况,假设剩下的人最初的号数为D,则要想最后留下,D必须在除了最后一次之外每一次都要排在偶数位(否则它一旦排在奇数位,就要被扔掉)。

2.而每次扔掉奇数位,剩下的人的号数都要在当前号数的基础上除以2。

3.因为一开始的时候每个数字的号数就是数字本身,这样D每次排列后的位数都是D除以2的n次方的商,所以要让D每一次都排在偶数位等价于D每一次除以2的n次方的商都是偶数(最后一次除外),直到最后商为1,就剩下它自己。这就是说D必须是2的n次方(n>=1)。

4.也就是说每一个2的n次方数都有可能是最后留下的那个数,那如果在士兵总数给定的情况下,我们怎么去找这个数D呢?
因为每一次排列都是位数除以2,所以当除以2到某一次的时候可能的2的n次方数最小的就是2的1次方,也就是2,然后是2次方(4),3次方(8),……,(当然此时还有非2的n次方的数存在),考虑简单一点,最大的2的n次方数是8的情况,这样再除一次,2就变成1了,也就是奇数位了,被扔掉,剩下4最小,如果这时候有8,则只剩下4和8了(其它的数<6>都在某一次除以2的时候成奇数位<3>被扔掉了),这样最后就剩下8;但如果这时候没有8,那就剩下4唯一一个了。
这样的话可以以此类推,最后剩下的D是所有出现的最大的2的n次方数,就是说同一个n的条件下在2的n+1次方出现之前,最后剩下的都是2的n次方。

结论:剩下的最后的数D就是小于给定数的最大的2的n次方数,本题给定数是123456,2的16次方是65536,2的17次方是131072,大于123456,所以最后剩下的是65536. 

 


二。

 

题干:每架飞机只有一个油箱,飞机之间可以相互加油,一箱油可供一架飞机绕地球赤道飞半圈。 

问:为使至少一架飞机绕地球赤道一圈回到起飞时的飞机场(此飞机场位于赤道上),至少需要出动几架飞机? 


思考:前提:1 尽量用最少飞机 2 充分利用带的油

假设下面图的a到e点就是赤道的一圈,b,c,d分别是3个四等分点,那么最后完成的示意图如下(图1)(头顶上的数字表示离完成还需要的油桶数,以下同)
                    0
 |__|__|__|__|
 a   b   c   d   e

       图1
为了让一架飞机要跑完赤道一圈,就是说让这架飞机在c点的时候油箱的油是满的,这样可以简化这幅图(图2):
          1
 |__|__|
 a   b   c

     图2
就是说在从a飞到c以后所有飞机只要剩下一桶油就可以了,但是要让它在c点的时候有一桶油,它自己是不可能可以独立从b飞到c的,所以从b到c至少有2架在飞,那它们一起从b到c要消耗掉1桶油,这样就再简化一下(图3):
      2
 |__|
 a  b

  图3
那么从a到b每架飞机要消耗1/2桶油,假设有x架飞机,要让它们飞到b的时候一起留下2桶油(因为可以互相加油,所以每架飞机的油都转移到可以飞更远的飞机上了,绝对不会浪费),就可以得出:
1/2x=(x-2) <=>x=4.
答案为4架。

posted @ 2009-04-24 19:53  充尚匀消  阅读(283)  评论(0编辑  收藏  举报