Problem E 用鍊錶實現約瑟夫環

2022-07-20 10:45:12 字數 992 閱讀 8248

你聽說過約瑟夫問題嗎?問題大致如下:首先n個人圍成乙個圈,標記為1到n號。接著,從1號開始報數(從1開始),然後2號報數,然後3號。。。當有人報到到m時,這個人就要踢出比賽,然後從被踢出的人的下乙個人開始,重新報數(從1開始)。這樣經過n-1次後,就只剩下了乙個人,問最後剩下的那個人是幾號?

第1行為t,表示有t組資料;

第2行到第t+1開始,每行輸入n和m,n表示有幾個人,m為上述的每報數m次就要踢出乙個人

1=乙個數,表示最後剩下了幾號     

2

5 36 4

4

5

#include #include 

typedef

struct

nodeperson;

//結點型別

person * list(int

n) cyclic->next=head;//

首尾相連

return

head;

}void find_delete(person * head,int m)//

此步我是將刪除和遍歷寫在一起的,可分開

person * p=head;

//找到編號為1的人

while (p->number!=1

)

//從編號為1的人開始,只有符合p->next==p時,說明鍊錶中除了p結點,所有編號都出列了,

while (p->next!=p)

tail->next=p->next;//

從鍊錶上將p結點摘下來

free(p);

p=tail->next;//

繼續使用p指標指向出列編號的下乙個編號,比賽繼續

} printf(

"%d\n

",p->number);

free(p);

}int

main()

return0;

}

約瑟環的實現

intarray 100 n 0,m 0,receive 100 receive 陣列用來接收每次交出去的人 n 是用來記錄輸入的總人數 m 是用來記錄中間割幾個人 intcountm 0 用來記錄圈子裡面剩餘的人數 printf 請輸入圈子裡面的總人數 m和迴圈報數出列條件的 m n scanf ...

約瑟環的python實現(舉例說明)

題目是 n個人圍成一圈報數,報到某乙個數m的就出局,問你最後剩下來的人的號碼?網上通用約瑟夫環的演算法是 函式接收n和m,返回最後出圈的是第幾個人 e.g.yuesefu 5,2 3 yuesefu 2,100 1 int yuesefu int n,int m 用python實現上面演算法為 de...

Problem E 建立鍊錶 線性表

time limit 1 sec memory limit 128 mb submit 323 solved 207 線性表 設鍵盤輸入n個英語單詞,輸入格式為n,w1,w2,wn,其中n表示隨後輸入英語單詞個數,試編一程式,建立乙個單向鍊錶,實現 如果單詞重複出現,則只在鍊錶上保留乙個。4 now...