一道逻辑题
前幾天在網上看到一道題目:將54張撲克牌按照某種次序進行排列,然后取出第一張放至底部,然后將現在的第一張翻開拿出來,不斷循環,直至手中沒有撲克牌,而且拿出撲克牌的順序依次是紅心A-K、方片A-K、黑桃A-K、梅花A-K、大王、小王。
這道題目讓我想起了小時候老爸給我出的題目,取一幅撲克牌同花色的A-K,以某種順序排列后,取第一張放至最后,翻開現在的第一張,依次循環,使翻開的牌面依次為A-K。這兩個問題有著異曲同工之妙。
所以我就想到用程序來實現它
下面是代碼(Python3):
代碼的思想也非常簡單,就是隔一個輸入一個。
測試:
輸出:
[7, 1, 12, 2, 8, 3, 11, 4, 9, 5, 13, 6, 10]驗證正確。
¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥
新增于2018年9月28日
在網上看到另一種解法,是微軟員工提出來的
具體做法就是將n個數目按從小到大排列,然后按照上面的步驟,把第一個數字放最后,輸出第二個數字,循環得到這n個數字的輸出順序,這時將輸出順序和輸出序列的索引值互換,將得到的新序列按輸出序列的數字進行排序就得到了要的結果。就拿給網友的例子n=5舉例,將[1,2,3,4,5]按照執行步驟一次輸出,得到輸出序列[2,4,1,5,3],將這個輸出序列和該序列的索引值互換并按照輸出序列的值進行排序,得到[3,1,5,2,4]經驗證,這就是n=5時想要的結果。
代碼實現如下:(Python3)
代碼測試正確!
與50位技術專家面對面20年技術見證,附贈技術全景圖總結