依稀記得學c語言的時候寫過這樣的**來實現約瑟夫環(貌似期末的實驗考試就是抽到了這個題,我才不會告訴你我拿了100分捏)
#include
void main()
i++;//使指標下移
if(i==n) i=0;//報數到最後乙個編號,將i恢復為0
}while(*p==0) p++;//最後剩下來的人編號不=0,尋找這乙個
printf("the last one is %d\n",*p);//把編號不為0的編號輸出即可
}
學資料結構時老師給出了這樣的要求:
約瑟夫(joseph)問題的一種描述是:編號為1,2,…,n的n個人按順時針方向圍坐一圈,每人持有乙個密碼(正整數)。開始任選乙個正整數作為報數上限值m,從第乙個人開始按順時針方向自1開始順序報數,報到m時停止報數。報m的人出列,將他的密碼作為新的m值,從他在順時針方向上的下乙個人開始重新從1報數,如此下去,直至所有人全部出列為止。試設計乙個程式求出出列順序,利用單向迴圈鍊錶儲存結構模擬此過程,按照出列的順序印出各人的編號。
// 實驗一_約瑟夫環.cpp : 定義控制台應用程式的入口點。
//#include "stdafx.h"
#include "stdlib.h"
typedef struct person
;person *head, *p, *q;
int main()
else
p->num = i;
printf("請輸入第%d個人的密碼:", i);
scanf("%d", &(p->pwd));
}p->next = head;
p = head;
int password;
printf("請輸入初始密碼:");
scanf("%d",&password);
for (int i = 1; i < number+1; i++)
printf("第%d個出局的人的編號是%d\n", i, p->num);
password = p->pwd;
p->num = p->next->num;
p->pwd = p->next->pwd;
p->next = p->next->next;
}return
0;}
【測試資料】
m的初值為20;n=7,7個人的密碼依次為:3,1,7,2,4,8,4,首先m值為6(正確的出列順序應為6,1,4,7,2,3,5)。
**上完了,希望對你有幫組,哈哈哈
實驗一 選做 線性表及其應用 約瑟夫環
include include define n 100 約瑟夫圓環 利用迴圈鍊錶,不需要頭指標。因為報號的人需要退出圓環,即需要再迴圈鍊錶中實現刪除節點的操作 typedef struct lnode lnode,linklist 定義迴圈鍊錶結點型別。資料方面只需要含乙個每人的乙個編號和乙個nu...
資料結構演算法 約瑟夫環問題(線性表)
這是我寫的第乙個部落格,目前讀大二,如果寫的有問題還請各位多多指教 眾所周知,約瑟夫環問題是乙個出現在電腦科學和數學中的問題,據說著名猶太歷史學家 josephus有過以下的故事 在羅馬人占領喬塔帕特後,39 個猶太人與josephus及他的朋友躲到乙個洞中,39個猶太人決定寧願死也不要被敵人抓到,...
線性表的應用
1 用順序表實現 include using namespace std define maxsize 100 typedef struct sqlist int initlist sqlist s void createlist sqlist s void listshow sqlist s ln...