線性表的應用 約瑟夫環

2021-07-24 09:36:20 字數 1289 閱讀 8438

依稀記得學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...