1998年11月26日[1] 星期四 晴转小雨
电脑书《数据结构及其应用》第157页的纸牌游戏的算法,写成通俗的原理就是(此游戏是:有N张牌,打开第一张是1,拿走;然后把两张依次放在末尾,再打开上面一张,是2,再拿走;再把三张牌放到末尾,再打开上面一张 ...;求原来的牌是怎样的):把按1, 2, 3 ...顺序的牌按游戏规则拿出,那么拿出的牌一定不是按1, 2, 3 ...的。在第一张拿出的牌上[2]标记1,在第二张上记2,...。把牌按印刷的号码按1, 2, 3 ...排好,那么,你写的顺序就是所求顺序。
例如:9张牌,按升序拿走得到:148673925
然后画个表,上面的数是印刷的,下面是自己写的
牌上印的 | 1 | 4 | 8 | 6 | 7 | 3 | 9 | 2 | 5 |
---|---|---|---|---|---|---|---|---|---|
手写的 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
上表告诉我们,印有A[3]的应该放在第1位,印有2的放在第4位,印有3的放在第8位...。所以所求顺序就是:186294537。看看A是第1位吗?2是第4位吗,3是第8位吗?对了。只要这样打开,就会变魔术似的翻出1, 2, 3 ...。
不过写成程序就不是那么简单了。
晚九时三十分
网友评论