這裡用迴圈鍊錶實現乙個帶密碼的約瑟夫環
意思是有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 問...