迴圈鍊錶解決帶密碼的約瑟夫環問題

2021-09-28 19:11:40 字數 1649 閱讀 1186

這裡用迴圈鍊錶實現乙個帶密碼的約瑟夫環

意思是有n個人,編號1-n,他們每個人手裡拿著屬於自己的密碼。大家按照編號坐成一圈,然後給定乙個數m,然後大家從頭進行0-m報數,報到m的人出列,交出密碼,剩餘的人從這裡開始繼續報數,規則一樣...直到全部出列,問你最後的密碼是什麼?

easy

// 有頭結點迴圈鍊錶實現約瑟夫環問題  

#include#include#define ok 1

#define error 0

typedef int status;

typedef struct rnodernode;

typedef rnode* ringlist;

status creat(ringlist* l)

(*l)->next=null;

return ok; }

status init(ringlist* l,int n)

newx->next=*l;

newx->num=i;

printf("輸入第%d個節點的密碼:",i);

scanf("%d",&newx->key);

// newx->key=i;

tail->next=newx;

tail=tail->next;

} return ok; }

int kill(ringlist l,int m,int res)

cnt++;

if(cnt==m)

else

} return len;

}void show(ringlist l)

printf("\n");

}int main()

還寫了乙個沒有頭結點的,完全類似,唯獨判斷結束的地方有些修改

// 無頭結點迴圈鍊錶實現約瑟夫環問題  

#include#include#define ok 1

#define error 0

typedef int status;

typedef struct rnodernode;

typedef rnode* ringlist;

status init(ringlist* l,int n)

(*l)->num=1;

printf("輸入第1個節點的密碼:");

scanf("%d",&(*l)->key);

(*l)->next=*l;

rnode* tail=*l;

for(int i=2;i<=n;i++)

newx->next=*l;

newx->num=i;

printf("輸入第%d個節點的密碼:",i);

scanf("%d",&newx->key);

tail->next=newx;

tail=tail->next;

} return ok;

}int kill(ringlist l,int m,int res)

else

p=p->next;

} return len;

}void show(ringlist l)

printf("\n");

}int main()

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

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

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

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

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

約瑟夫環問題可以簡單的使用陣列的方式實現,但是現在我使用迴圈鍊錶的方法來實現,因為上午看到一道面試題規定使用迴圈鍊錶解決約瑟夫環問題。什麼是約瑟夫環?這道面試題考察了迴圈鍊錶的 建立 遍歷 和 刪除 建立的迴圈鍊錶的結構圖 解決約瑟夫環問題的過程 c 實現 如下 1 迴圈鍊錶解決約瑟夫環問題 2 問...