python約瑟夫函數(shù) python解決約瑟夫環(huán)問題編程

python類約瑟夫環(huán)原創(chuàng)問題求解 求大神

COUNT?=?60??#?總?cè)藬?shù)

創(chuàng)新互聯(lián)建站是一家專注于網(wǎng)站設(shè)計、網(wǎng)站制作與策劃設(shè)計,黃陂網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)建站做網(wǎng)站,專注于網(wǎng)站建設(shè)十余年,網(wǎng)設(shè)計領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:黃陂等地區(qū)。黃陂做網(wǎng)站價格咨詢:028-86922220

INDEX_FIRST?=?2???#?第一次站出來的是2號

origin?=?list(range(1,?COUNT+1))

res?=?[]

index_label?=?INDEX_FIRST?-?1

index_temp?=?0

while?origin:

index_temp?=?(index_label?+?index_temp)?%?len(origin)

res.append(origin.pop(index_temp))

index_label?+=?1

print(res)

請點擊輸入圖片描述

python3 實現(xiàn)約瑟夫環(huán)

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

計算結(jié)果:

killed: 3

killed: 7

killed: 2

killed: 10

killed: 1

killed: 6

killed: 8

killed: 9

killed: 4

survive: 5

Python約瑟夫圓環(huán)的解法

現(xiàn)在有13個人圍成一個環(huán),從1開始報數(shù),數(shù)到3的人離開,寫出程序計算最后剩下的是誰。

使用while循環(huán)

使用for循環(huán)

使用遞歸

摒棄遞歸,每次步長不為k時候都把當(dāng)前元素彈出并放到隊列尾部,從而模擬循環(huán)鏈表結(jié)構(gòu)。進(jìn)一步優(yōu)化,由于列表彈出第一個元素的復(fù)雜度較高,可以使用雙端隊列來進(jìn)行優(yōu)化:

【基礎(chǔ)】Python3小程序_約瑟夫生者死者小游戲

30 個人在一條船上,超載,需要 15 人下船。

于是人們排成一隊,排隊的位置即為他們的編號。

報數(shù),從 1 開始,數(shù)到 9 的人下船。

如此循環(huán),直到船上僅剩 15 人為止,問都有哪些編號的人下船了呢?

方法一:無算法運算

方法二:算法隊列,利用隊列先進(jìn)先出的原理

queue模塊學(xué)習(xí)

基礎(chǔ)使用函數(shù)

q=queue.Queue(n) #建立長度為n的先進(jìn)先出隊列FIFO

q=q=queue.LifoQueue(n) #建立長度為n的后進(jìn)先出隊列LIFO

q.put() #放入元素

q.get() #取出元素

模塊其他函數(shù)

Python語言之如何實現(xiàn)約瑟夫環(huán)問題

def josephus(n, m):

if type(n) != type(1) or n = 0:

raise Exception('n must be an integer(n 0)')

if n == 1:

return 0

else:

return (josephus(n - 1, m) + m) % n

if __name__ == '__main__':

print josephus(8, 3)

print josephus(1, 2)

print josephus(0, 2)

本文標(biāo)題:python約瑟夫函數(shù) python解決約瑟夫環(huán)問題編程
網(wǎng)站URL:http://muchs.cn/article6/hjscig.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供ChatGPT、網(wǎng)站改版、面包屑導(dǎo)航、商城網(wǎng)站App開發(fā)、全網(wǎng)營銷推廣

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都app開發(fā)公司