前幾天在網上看到一道題目:將54張撲克牌按照某種次序進行排列,然後取出第一張放至底部,然後將現在的第一張翻開拿出來,不斷迴圈,直至手中沒有撲克牌,而且拿出撲克牌的順序依次是紅心a-k、方片a-k、黑桃a-k、梅花a-k、大王、小王。
這道題目讓我想起了小時候老爸給我出的題目,取一幅撲克牌同花色的a-k,以某種順序排列後,取第一張放至最後,翻開現在的第一張,依次迴圈,使翻開的牌面依次為a-k。這兩個問題有著異曲同工之妙。
所以我就想到用程式來實現它
下面是**(python3):
import math
def test(n):
res = [0 for i in range(n)]
num = 0
count = 1
c = int(math.log2(n))+1
for i in range(c):
for j in range(n):
if res[j] == 0:
num += 1
if num % 2 == 0:
res[j] = count
count += 1
for i in range(n):
if res[i] == 0:
res[i] = count
return res
**的思想也非常簡單,就是隔乙個輸入乙個。
測試:
print(test(13))
輸出:
[7, 1, 12, 2, 8, 3, 11, 4, 9, 5, 13, 6, 10]
驗證正確。
¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥
新增於2023年9月28日
在網上看到另一種解法,是微軟員工提出來的
具體做法就是將n個數目按從小到大排列,然後按照上面的步驟,把第乙個數字放最後,輸出第二個數字,迴圈得到這n個數字的輸出順序,這時將輸出順序和輸出序列的索引值互換,將得到的新序列按輸出序列的數字進行排序就得到了要的結果。就拿給網友的例子n=5舉例,將[1,2,3,4,5]
按照執行步驟一次輸出,得到輸出序列[2,4,1,5,3]
,將這個輸出序列和該序列的索引值互換並按照輸出序列的值進行排序,得到[3,1,5,2,4]
經驗證,這就是n=5時想要的結果。
**實現如下:(python3)
def test2(n):
a = [i+1 for i in range(n)]
res =
while(a):
if len(a) == 1:
break
a = a[2:] + [a[0]]
res = [[res[i], i+1] for i in range(len(res))]
res.sort()
return [res[i][1] for i in range(len(res))]
**測試正確! 一道邏輯思維題
新聞上新加坡一道為十五六歲學生設計的奧數題被人放上網,不料惹得西方國家網民絞盡腦汁爭相答題。許多人驚呼,新加坡孩子竟然要做這麼難的數學題啊!值得注意的是,英國 美國等西方國家網民普遍震驚,而一些亞洲國家網民則相對淡定。對這一現象,不少人表示 只能呵呵!對於多年不動腦筋的學渣試著理解一下先 alber...
筆試裡的一道邏輯題
火車上,來自美 法 韓 俄四國的甲 乙 丙 丁四位旅客恰好相聚在某個車廂中。他們每個人除了會說本國語言外,還會說其他三國語言中的一種,有一種語言三個人都會說。這四位旅客交談的有關情況如下 乙不會說英語,當甲與丙交談時,他卻能替他們作翻譯 甲是南韓人,丁不會說韓語,但他倆卻能毫無困難地交談 乙 丙 丁...
2020 10 29 一道有趣的邏輯題
有乙個國王,他有乙個漂亮的公主,公主到了成年的年紀,國王要挑選乙個聰明的成年男子當駙馬,迎娶公主。他最終在所以適齡男子中挑選了3名都很聰明的男子接收最後的挑戰。國王準備了5頂帽子,3頂是黑色的,2頂是紅色的。讓3名聰明的男子併排站好,國王依次從背後給3個人戴上帽子,誰能第乙個說出自己帽子顏色的人,就...