約瑟夫環問題 鍊錶題型

2021-06-06 13:18:41 字數 927 閱讀 4146

/*

設編號為1,2,…,n的n個人按順時針方向圍坐一圈,每人手持一密碼(正整數)。開始任選乙個正整數作為報數上限m,從第乙個人開始按順時針方向自1開始報數,報到m時停止報數。報m的人出列,將他的密碼作為新的m值。從他在順時針方向的下乙個人重新從1開始報數,如此下去,直到所有人全部出列為止。試設計乙個程式求出出列順序。

[基本要求]

利用單向迴圈鍊錶和順序儲存兩種結構實現。

[測試資料]

m=20;n=7;個人密碼依次為:3,1,7,2,4,8,4(正確的出列順序應為6,1,4,7,2,3,5)

#include

#include

#define tag 0000

int n,t=1;

typedef struct node

lnode,*linklist;

void initlist(linklist &l)

l->next=null;}//

void listinsert(linklist &l,int n)

p->next=l->next;}/

void fun(linklist l,int m)

printf("%d ",p->number);

p1=p;

p=p->next;

n--;

p2->next=p;

if(n>0)

fun(p1->next,p1->password);}/

void main()

{ int m;

linklist l;

printf("請輸入初始報數上限m,人數n\n");

scanf("%d %d",&m,&n);

initlist(l);

listinsert(l,n);

fun(l->next,m);

約瑟夫環問題(迴圈鍊錶)

這是一道比較經典的迴圈鍊錶問題,在華為上機筆試中也出現過。約瑟夫環是乙個數學的應用問題 已知n個人 以編號1,2,3.n分別表示 圍坐在一張圓桌周圍。從編號為k的人開始報數,數到m的那個人出列 他的下乙個人又從1開始報數,數到m的那個人又出列 依此規律重複下去,直到圓桌周圍的人全部出列。includ...

約瑟夫環問題(迴圈鍊錶)

轉 約瑟夫環 是乙個數學的應用問題 已知n個人 以編號1,2,3.n分別表示 圍坐在一張圓桌周圍。從編號為k的人開始報數,數到m的那個人出列 他的下乙個人又從1開始報數,數到m的那個人又出列 依此規律重複下去,直到圓桌周圍的人全部出列。include include typedef struct n...

迴圈鍊錶 約瑟夫環問題

正好這幾天在看資料結構,覺得鍊錶應用挺廣的,特寫一例項。問題描述 選首領。n個遊戲者圍成一圈,從第乙個開始順序報數1,2,3.凡報到3者退出圈子,最後留在圈中的人為首領。思路 建立乙個包含n個節點的單迴圈鍊錶來模擬n個人圍成的圈。節點的資料域存放遊戲者的編號。在程式中,以刪除節點模擬人退出圈子的處理...