日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

一道逻辑题

發布時間:2024/9/30 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 一道逻辑题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前幾天在網上看到一道題目:將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 = 0count = 1c = int(math.log2(n))+1for i in range(c):for j in range(n):if res[j] == 0:num += 1if num % 2 == 0:res[j] = countcount += 1for i in range(n):if res[i] == 0:res[i] = countreturn res

代碼的思想也非常簡單,就是隔一個輸入一個。
測試:

print(test(13))

輸出:

[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)

def test2(n):a = [i+1 for i in range(n)]res = []while(a):if len(a) == 1:res.append(a[0])breakres.append(a[1])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))]

代碼測試正確!

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的一道逻辑题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。