題目:約瑟夫環
【問題描述】
約瑟夫(joseph)問題的一種描述是:編號為1,2,.....,n的n個人按順時針方向圍坐一圈,每人持有乙個密碼(正整數)。一開始任選乙個正整數作為報數上限值m,從第乙個人開始順時針方向自1開始報數,報到m時停止報數。報m的人出列,將他的密碼作為新的m值,從他的順時針方向上的下乙個人開始重新從1報數,如此下去,直至所有的人都出列為止。試設計乙個程式求出列順序。
【其本要求】
利用單向迴圈鍊錶儲存結構模擬此過程,按照出列的順序印出各人的編號。
【測試資料】
m的初值為20;n=7,7個人密碼依次為:3,1,7,2,4,8,4,首先m的值為6(正確的出列順序應為6,1,4,7,2,3,5)。
#include "iostream"
using namespace std;
typedef struct lnode
lnode,*linklist; // 結點型別,指標型別
int insert(linklist &l,int password, int num) //引用型別的引數
else
return 0;
}void joseph(linklist &l,int k,int m) //引用型別的引數
q->next=p->next;
cout
m=p->password; //更新m的值
free(p);
k--; //人數減1
p=q->next;
} cout<>n;
cout<
cin>>m;
for(i=1;i<=n;i++)
p->next=head; //構成約瑟夫環
cout<
執行結果如下圖:
結構體定義中
typedef struct lnode
lnode,*linklist; // 結點型別,指標型別
typedef 宣告,簡稱 typedef,為現有型別建立乙個新的名字。
typedef struct node
lnode, *linklist;
lnode就相當於struct node ,起了乙個別名。
*linklist也相當於struct node
也就是:
lnode 等價 struct node
linklist 等價 lnode* 等價 struct node*
lnode a;等價 struct node a;
linklist p;等價 lnode* p;等價 struct node* p;
《資料結構與演算法》課程設計 32 約瑟夫環
問題描述 編號為1,2,n的n個人按順時針方向圍坐一圈,每人持有乙個密碼 正整數 一開始任選乙個正整數作為報數的上限值m,從第乙個人開始按順時針方向自1開始順序報數,報到m時停止報數,報m的人出列,將他的密碼作為新的m值,從他的順時針方向上的下乙個開始重新從1報數,如此下去,直至所有人全部出列為止,...
資料結構課程設計 (一)線性結構(約瑟夫環)
joseph環 任務 編號是1,2,n的n個人按照順時針方向圍坐一圈,每個人只有乙個密碼 正整數 一開始任選乙個正整數作為報數上限值m,從第乙個仍開始順時針方向自1開始順序報數,報到m時停止報數。報m的人出列,將他的密碼作為新的m值,從他在順時針方向的下乙個人開始重新從1報數,如此下去,直到所有人全...
課程設計表
create database drug 藥品表 create table drug did nvarchar 10 primary key,dname nvarchar 50 not null,dimage nvarchar 100 not null,dmodel nvarchar 10 chec...