約瑟夫問題(猴子選王)c語言鍊錶與陣列的實現

2021-10-07 08:56:21 字數 2165 閱讀 4768

1.約瑟夫問題

設編號為1,2,… m的m個人圍坐一圈,從1開始報數,數到n 的那個人出列,它的下一位又從1開始報數,數到n的那個人又出列,依次類推,直到所有人出列為止,由此產生乙個出隊編號的序列。

1 2 3 4 5 6 7 8

第1 次出列 6 a[5]=0 total=1

1 2 3 4 5 7 8

第2次出列4 a[3]=0 total=2

1 2 3 5 7 8

第3次出列4 a[2]=0 total=3

1 2 5 7 8

第4次出列5 a[4]=0 total=4

1 2 7 8

第5次出列8 a[7]=0 total=5

1 2 7

第6次出列7 a[6]=0 total=6

第7次出列2 a[1]=0 total=7

1此時只剩下最後乙個數,停止刪除

利用陣列(向量)解決問題:

#include 

#include

int main()

array=

(int*

)calloc

(m,sizeof

(int));

//建立乙個動態陣列陣列長度為m

for(i=

0; i) array[i]=1

;//利用迴圈給陣列中元素賦初值1 其中1代表未出列 0代表出列

i=0;

total=0;

a=0;

for(

; total1; i++)}

for(i=0;

1; i++)if

(array[i]==1

)//輸出最後乙個留下來的人

free

(array)

;return0;

}

##(2) 鍊錶儲存演算法

(a)用迴圈鍊錶儲存m個人的位置資訊。

(b)當報數到需要出列的結點時,刪除該結點。

(c)當只剩下乙個結點都出列後,迴圈結束,輸出最後剩下的。

4. 測試資料模擬演算法執行過程

m=8 6

1 2 3 4 5 6 7 8

第1 次出列 6 刪除第六個節點

1 2 3 4 5 7 8

第2次出列4 刪除第四個節點

1 2 3 5 7 8

第3次出列3 刪除第三個節點

1 2 5 7 8

第4次出列5 刪除第五個節點

1 2 7 8

第5次出列8 刪除第八個節點

1 2 7

第6次出列7 刪除第七個節點

1 2第7次出列2 刪除第二個節點

1此時只剩下乙個節點,停止刪除

用鍊錶來解決約瑟夫環問題:

#include

#include

static struct node *head,

*rear,

*temp,

*temp1;

static int m,n;

struct node

;//構建乙個鍊錶,其中儲存著序號

struct node *

creat()

rear-

>next=head-

>next;

return head;

}//建立鍊錶並且將其構成單向迴圈鍊錶,其中head為頭指標,rear為尾指標

struct node delete()

;//這個函式用來刪除鍊錶中的節點,同時輸出每次被刪除節點的序號

int main()

head=

creat()

; temp=head-

>next;

temp1=head;

int i=1;

for(

;flag1;i++

) temp1=temp;

temp=temp-

>next;

}//利用迴圈來找到每次報數為n的節點,再利用函式將其刪除

printf

("\n最後剩下的是%d\n"

,temp-

>num)

;free

(temp)

;return0;

}

C語言猴子選王鍊錶實現

一堆猴子有m個,編號分別是1,2,3 m,這m個猴子按照編號1,2,m的順序圍坐一圈,然後從第1開始數,每數到第n個,該猴子就要離開此圈,這樣依次下來,直到圈中只剩下最後乙隻猴子,則該猴子就為大王。要求 分別採用向量及鍊錶兩種儲存方式實現該問題的求解,給出一組m和n,輸出對應的猴王。include ...

C語言程式設計 猴子選大王 鍊錶應用

description 有n只猴子,從1 n進行編號。它們按照編號的順時針方向排成乙個圓圈,然後從第一只猴子開始報數。第一只猴子報的第乙個數字為1,以後每只猴子報的數字都是它們前面猴子所報數字加1。如果乙個猴子報的數字是m,則該猴子出列,下乙個猴子重新從1開始報數,直到所有猴子都出列為止,最後乙個出...

鍊錶經典問題 猴子選大王

n 只猴子要選大王,選舉方法如下 所有猴子按1,2 n 編號並按照順序圍成一圈,從第 1個猴子起,由 1開始報數,報到 m時,該猴子就跳出圈外,下乙隻猴子再次由 1開始報數,如此迴圈,直到圈內剩下乙隻猴子時,這只猴子就是大王。include includeusing namespace std ty...