日志分类:编程算法

25匹赛马的问题

2009-11-01 13:55  |  分类:编程算法

网上流传着这样一个面试问题:

25匹赛马,5个跑道,也就是说每次有5匹马可以同时比赛。问最少比赛多少次可以知道跑得最快的5匹马?

今天在CSDN论坛上又看到这个,仔细的想了想。我觉得很多给出算法的人都只是定式的考虑到每次只能5匹马比赛。

可是根据我的经验,赛马场是圈形的(我还专门查了赛马场的图片。。)。那么每次可以10匹马一起跑。每5匹向相反

方向跑。找出最先到达中间线的5匹。

我们把马分成3列:

A1,A2,A3,A4,A5,A6,A7,A8,A9,A10

B1,B2,B3,B4,B5,B6,B7,B8,B9,B10

C1,C2,C3,C4,C5

第一次:A1,A2,A3,A4,A5,A6,A7,A8,A9,A10 ->A1,A2,A3,A4,A5

第二次:B1,B2,B3,B4,B5,B6,B7,B8,B9,B10 ->B1,B2,B3,B4,B5

第三次:A1,A2,A3,A4,A5 B1,B2,B3,B4,B5 ->以A开头的串a(A1为最大,后四匹的AB顺序不考虑) 或以B开头串b(B1为最大后四匹的AB顺序不考虑)

第四次:a与A6,A7,A8,A9,A10比较 或b与B6,B7,B8,B9,B10比较 ->;E1,E2,E3,E4,E5

第五次:E1,E2,E3,E4,E5 C1,C2,C3,C4,C5 ->D1,D2,D3,D4,D5

D1,D2,D3,D4,D5为最快5匹。
所以最少次数为5次。

嗯,这是我的想法,不知道有什么纰漏没。。。暂时自己没发现。。等待论坛讨论结果。。。

今天在上班的路上又考虑这个问题,觉得第四步可以去掉,因为前三步已经可以比出前二十匹中最快的五匹,具体分析晚上回家再补上。此为手机添加。11月2号。

继续分析:
第一次比出的A1,A2,A3,A4,A5 和第二次比出的B1,B2,B3,B4,B5都是各组中最快的。
假如A1是在A1,A2,A3,A4,A5和B1,B2,B3,B4,B5最快的。
有人或许会问:A6,A7,A8,A9,A10可能比B1还快,如果这样的话,当上面的第三次比较时,结果还是A1,A2,A3,A4,A5,其他情况同此分析。
所以,三次比较后,就可以找出前20匹中最快的5匹。

一个女程序员的征婚信息:
SELECT * FROM 男人们
WHERE (未婚=true or 离异=true) and 同性恋=false and 穷光蛋=false and 有房=true and 有车=true and 条件 in (‘细心’,'温柔’,'体贴’,'贤惠’,'会做家务,会做饭,会逛街买东西,会浪漫,活泼,可爱,帅气,绅士,大度,气质,智慧’,'最好还能带孩子’)

一高手回复:
(0 row(s) affected)

全文阅读 »

蛇形矩阵

2009-06-14 17:32  |  分类:编程算法

也说一下蛇形矩阵吧,蛇形矩阵有好几类,下面这个是其中之一:
                                      1    2     6     7
                                      3    5     8    13
                                      4    9    12   14
                                      10  11  15  16
这几天被这种矩阵吸引了,当然我觉得这是最不像“蛇形”的蛇形矩阵了哈。
然后呢,自己动手写了一段代码,也算实现了这种效果,可是算法上面太复杂了

for循环套着for循环,自己看着都晕,然后上网找了几条高手写的,终于发现了下面
这条很简洁的,可惜不知道这位大牛是谁啊。。
具体实现很简洁明了,我想说的是,这种不单能实现N*N的方阵,稍微变换下还能实现N*M的矩阵,
全文阅读 »