首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

赛马有关问题

2012-03-21 
赛马问题有50匹马,5条跑道,每条跑道只能跑1匹马.比赛没有计时,要赛出前3名,最少要赛多少场?求C或C++代码[

赛马问题
有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次可测。
[解决办法]
竞赛树或赢者树。看看吧,数据结构和算法书上有。

热点排行