❶ 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的出局,來回循環,最後剩下一個人
這個叫猴子選大王,也叫約瑟夫環