導航:首頁 > 編程語言 > 約瑟夫環python

約瑟夫環python

發布時間:2022-12-23 23:15:37

python3 實現約瑟夫環

#coding=GBK

class Node():

    def __init__(self,value,next=None):

        self.value = value

        self.next = next

def createLink(n):

    if n<=0:

        return False

    elif n ==1:

        return Node(1)

    else:

        root = Node(1)

        tmp = root

        for i in range(2,n+1):

            tmp.next = Node(i)

            tmp = tmp.next

        tmp.next = root

        return root

def showLink(root):

    tmp = root

    while True:

        print(tmp.value)

        tmp = tmp.next

        if tmp ==None or tmp == root :

            break

def josephus(n,k):

    if k ==1 :

        print("倖存者:",n)

        return

    root = createLink(n)

    tmp = root

    while True:

        for i in range(k-2):

            tmp = tmp.next

        print("killed:",tmp.next.value)

        tmp.next = tmp.next.next

        tmp = tmp.next

        if tmp.next == tmp:

            break

    print("survive:",tmp.value)

if __name__ =='__main__':

    josephus(10,13)

計算結果:

killed: 3

killed: 7

killed: 2

killed: 10

killed: 1

killed: 6

killed: 8

killed: 9

killed: 4

survive: 5

❷ 新手如何自學編程

新手如何自學編程:

工具/原料:一本基礎類的編程語言書、一台可以上網的電腦(相應的編程軟體)。

1、選擇一本相對基礎的編程語言書,學習的的同時記得對基礎的語法進行標記和注釋,加強自己的理解。像JAVA入門到精通,編程思想,JAVA核心技術。

❸ 力扣236單周賽題目分享

共有 n 名小夥伴一起做游戲。小夥伴們圍成一圈,按 順時針順序 從 1 到 n 編號。確切地說,從第 i 名小夥伴順時針移動一位會到達第 (i+1. 名小夥伴的位置,其中 1 <= i < n ,從第 n 名小夥伴順時針移動一位會回到第 1 名小夥伴的位置。

游戲遵循如下規則:

從第 1 名小夥伴所在位置 開始 。
沿著順時針方向數 k 名小夥伴,計數時需要 包含 起始時的那位小夥伴。逐個繞圈進行計數,一些小夥伴可能會被數過不止一次。
你數到的最後一名小夥伴需要離開圈子,並視作輸掉游戲。
如果圈子中仍然有不止一名小夥伴,從剛剛輸掉的小夥伴的 順時針下一位 小夥伴 開始,回到步驟 2 繼續執行。
否則,圈子中最後一名小夥伴贏得游戲。
給你參與游戲的小夥伴總數 n ,和一個整數 k ,返回遊戲的獲勝者。

示例 1:

輸入:n = 5, k = 2

輸出:3

解釋:
游戲運行步驟如下:

示例 2:

輸入:n = 6, k = 5

輸出:1

解釋:
小夥伴離開圈子的順序:5、4、6、2、3 。小夥伴 1 是游戲的獲勝者。

這是一道標準的約瑟夫環問題,類似的題目很多,比如劍指offer中有一道小朋友們的游戲與此題就如出一轍。大家找個鏈表畫下題目就迎刃而解了,類似斐波那契數列一樣,了解公式直接解題。

給你一個長度為. n. 的. 3 跑道道路. ,它總共包含. n + 1. 個. 點. ,編號為. 0. 到. n. 。一隻青蛙從. 0. 號點第二條跑道. 出發. ,它想要跳到點. n. 處。然而道路上可能有一些障礙。

給你一個長度為 n + 1. 的數組. obstacles. ,其中. obstacles[i]. (取值范圍從 0 到 3)表示在點 i. 處的. obstacles[i]. 跑道上有一個障礙。如果. obstacles[i] == 0. ,那麼點. i. 處沒有障礙。任何一個點的三條跑道中. 最多有一個. 障礙。

比方說,如果. obstacles[2] == 1. ,那麼說明在點 2 處跑道 1 有障礙。
這只青蛙從點 i. 跳到點 i + 1. 且跑道不變的前提是點 i + 1. 的同一跑道上沒有障礙。為了躲避障礙,這只青蛙也可以在. 同一個. 點處. 側跳. 到 另外一條. 跑道(這兩條跑道可以不相鄰),但前提是跳過去的跑道該點處沒有障礙。

比方說,這只青蛙可以從點 3 處的跑道 3 跳到點 3 處的跑道 1 。
這只青蛙從點 0 處跑道 2. 出發,並想到達點 n. 處的 任一跑道 ,請你返回 最少側跳次數. 。

注意:點 0. 處和點 n. 處的任一跑道都不會有障礙。

示例 1:

輸入:obstacles = [0,1,2,3,0]

輸出:2

解釋:最優方案如上圖箭頭所示。總共有 2 次側跳(紅色箭頭)。

注意,這只青蛙只有當側跳時才可以跳過障礙(如上圖點 2 處所示)。

示例 2:

輸入:obstacles = [0,1,1,3,3,0]

輸出:0

解釋:跑道 2 沒有任何障礙,所以不需要任何側跳。

示例 3:

輸入:obstacles = [0,2,1,0,3,0]

輸出:2

解釋:最優方案如上圖所示。總共有 2 次側跳。

我的個人博客: https://qingfengpython.cn

力扣解題合集: https://github.com/BreezePython/AlgorithmMarkdown

❹ python類約瑟夫環原創問題求解 求大神

COUNT=60#總人數
INDEX_FIRST=2#第一次站出來的是2號

origin=list(range(1,COUNT+1))
res=[]
index_label=INDEX_FIRST-1
index_temp=0
whileorigin:
index_temp=(index_label+index_temp)%len(origin)
res.append(origin.pop(index_temp))
index_label+=1

print(res)

❺ python 實現7個人,從1數到3,數到3的出局,來回循環,最後剩下一個人

這個叫猴子選大王,也叫約瑟夫環

閱讀全文

與約瑟夫環python相關的資料

熱點內容
dvd光碟存儲漢子演算法 瀏覽:757
蘋果郵件無法連接伺服器地址 瀏覽:962
phpffmpeg轉碼 瀏覽:671
長沙好玩的解壓項目 瀏覽:144
專屬學情分析報告是什麼app 瀏覽:564
php工程部署 瀏覽:833
android全屏透明 瀏覽:737
阿里雲伺服器已開通怎麼辦 瀏覽:803
光遇為什麼登錄時伺服器已滿 瀏覽:302
PDF分析 瀏覽:484
h3c光纖全工半全工設置命令 瀏覽:143
公司法pdf下載 瀏覽:381
linuxmarkdown 瀏覽:350
華為手機怎麼多選文件夾 瀏覽:683
如何取消命令方塊指令 瀏覽:349
風翼app為什麼進不去了 瀏覽:778
im4java壓縮圖片 瀏覽:362
數據查詢網站源碼 瀏覽:150
伊克塞爾文檔怎麼進行加密 瀏覽:892
app轉賬是什麼 瀏覽:163