1. 火车运煤问题
你是山西的一个煤老板,你在矿区开采了有3000吨煤需要运送到市场上去卖,从你的矿区到市场有1000公里,你手里有一列烧煤的火车,这个火车最多只能装1000吨煤,且其能耗比较大——每一公里需要耗一吨煤。请问,作为一个懂编程的煤老板的你,你会怎么运送才能运最多的煤到集市?
2. 赛马问题
一共有25匹马,有一个赛场,赛场有5个赛道,就是说最多同时可以有5匹马一起比赛。假设每匹马都跑的很稳定,不用任何其他工具,只通过马与马之间的比赛,试问,最少得比多少场才能知道跑得最快的5匹马?(不能使用撞大运的算法)
3. 海盗分宝
5个海盗抢到了100颗宝石,每一颗都一样的大小和价值连城。
他们决定这么分:
1.抽签决定自己的号码(1,2,3,4,5)
2.首先,由1号提出分配方案,然后大家5人进行表决,当且仅当超过半数的人同意时,按照他的提案进行分配,否则将被扔入大海喂鲨鱼。(注意是”超过半数“而不是”达到半数“)
3.如果1号死后,再由2号提出分配方案,然后大家4人进行表决,同意当且仅当超过半数的人时,按照他的提案进行分配,否则将被扔入大海喂鲨鱼。
4。以此类推。
条件:
1、每个海盗都是很聪明的人,都能很理智的判断得失,从而做出选择。
2、每个海盗都知道其它海盗是很聪明的人。
问题:第一个海盗提出怎样的分配方案才能够使自己的收益最大化而不会命丧江湖?
提示:海盗的判断原则
1、保命
2、尽量多得宝石
3、尽量多杀人
4. 飞机加油问题
已知:每个飞机只有一个油箱,飞机之间可以相互加油(注意是相互,没有加油机),一箱油可供一架飞机绕地球飞半圈。
问题:为使至少一架飞机绕地球一圈回到起飞时的飞机场,至少需要出动几架飞机,飞行几架次?(所有飞机从同一机场起飞,而且必须安全返回机场,不允许中途降落,中间没有飞机场,一架飞机一起一落算一架次,假设加油可以瞬间完成。)
程序员面试宝典P314