赛马问题
有50匹马,5条跑道,每条跑道只能跑1匹马.比赛没有计时,要赛出前3名,最少要赛多少场?
求C或C++代码
[解决办法]
1场,看看马拉松去吧。
[解决办法]
每比赛1场可以排出次序,淘汰2匹马
[解决办法]
26场
用排列组合一一对应的思想
每场比赛必须淘汰3匹马
23场后淘汰了46匹马
剩下四匹再赛三场就决出了冠亚季军和第四名
[解决办法]
15次可测:
先把马匹分成10组,组内先赛一次,每组淘汰2个,剩3个。共剩30个。
每组中挑出最好的,共10个,比试2次。淘汰4匹(这4匹所在组的马也被淘汰,共剩下18个)
剩下的6匹:
a1 a2 a3
b1 b2 b3
第13次,a1、a2、a3、b1、b2比。
如果出现b1 b2 a1 a2 a3的情况,那么a2、a3被淘汰,b1第一。
50匹马中的第一毫无疑问是b1。剩下的,就是要在剩下的马中找出最好的两个。那么剩下b1、b2、b3、a1四组。
b1组的第2、第3有资格;
b2组的第1、第2有资格;
b3组,只有b3有资格;
a1组,只有a1有资格。
任务是在6个中找出2个,2次可测。
如果不是b1 b2 a1 a2 a3的情况,那么可以淘汰3组(b3组也被淘汰)。刨除最好的,在剩下3组的找出2个次好,还剩下5匹马,1次可测。
[解决办法]
竞赛树或赢者树。看看吧,数据结构和算法书上有。