用單向迴圈鍊錶解決約瑟夫環問題

2021-08-29 19:18:26 字數 710 閱讀 3859

設有n個人圍坐一圈,現以某個人開始報數,數到m的人出列,接著從出列的下乙個人開始重新報數,數到m的人又出列,如此下去,直到所有人都出列為止.按出列順序輸出. 

這段**是從網上找來的,在此特別說明!!!!!

#include   "stdlib.h"

struct ele main()

u->link = h;/*末表元後繼首表元,形成環*/

puts(

"\nthe numbers of who will quit the cycle in turn are:");

while (n)

printf("\n\n press any key to quit...\n");

getchar();

}

當碰到問題,首先考慮這個問題是怎樣的型別,第二從解決列表中選擇中最合適的方案.以這個問題為例:問題中是乙個迴圈性質,關鍵點「有n個人圍坐一圈」。可選資料結構與演算法中的可選方案:佇列,棧,線性表,串。佇列,棧和串都不大合適。以線性表中的單向迴圈鍊錶最合適。

回想當時面試時,我使用的是資料組,面試者問我,為什麼不使用鍊錶?陣列是可以解決問題,但相對麻煩些。思考一下,面試時,要多才考慮一下,這個考題背後的東西,最近一段在看《程式設計之美》,裡面的思路很好,如果能達到書上描述的那樣,碰到問題都抽絲剝繭,把能把複雜問題抽象化,簡單化,那麼程式設計的水平就能更上一層樓了。

用迴圈鍊錶解決約瑟夫環問題

題目見 解法 includeusing namespace std templatestruct node class nodelist void insert node newnode else node josephusremove int interval if head p head p n...

迴圈鍊錶解決約瑟夫環問題

題目要求的約瑟夫環操作 編號是1,2,n的n個人按照順時針方向圍坐一圈,每個人只有乙個密碼 正整數 一開始任選乙個正整數作為報數上限值m,從第乙個仍開始順時針方向自1開始順序報數,報到m時停止報數。報m的人出列,將他的密碼作為新的m值,從他在順時針方向的下乙個人開始重新從1報數,如此下去,直到所有人...

迴圈鍊錶解決約瑟夫環問題

問題描述 假設有n個小孩按照序號1,2,n圍坐成一圈,從第乙個小孩開始報數,每次報到n的人退出,接著從下乙個人重新開始從1開始報數,下一次再報到n的人退出,求最後乙個留下的人 小孩的個數n,和報數的n由鍵盤輸入 輸出留下人的序號 乙個迴圈鍊錶都寫得除出了很多問題,改了半天才出來 include in...