鍊錶經典問題 猴子選大王

2021-06-05 17:04:39 字數 661 閱讀 8643

n

只猴子要選大王,選舉方法如下:所有猴子按1,

2 ……… n 

編號並按照順序圍成一圈,從第

1個猴子起,由

1開始報數,報到

m時,該猴子就跳出圈外,下乙隻猴子再次由

1開始報數,如此迴圈,直到圈內剩下乙隻猴子時,這只猴子就是大王。

#include#includeusing namespace std;

typedef struct snode

lnode;

void houzi(int n,int k)

p=head;

pre=head;

while(n!=1)

coutpre=pre->next;

pre->next=p->next;

s=p;

p=p->next;

free(s);

n--;

} cout<<"最後的結點為:"

約瑟夫問題。

解決方法:建立乙個有

n個節點,沒有頭結點的迴圈鍊錶,確定第乙個報數人的位置。不斷從鍊錶中刪除節點,直到鍊錶為空。

還需要搞定的:單鏈表反轉,對單鏈表遍歷一次求中間值。先記下。

鍊錶 PTA 猴子選大王

一群猴子要選新猴王。新猴王的選擇方法是 讓n只候選猴子圍成一圈,從某位置起順序編號為1 n號。每只猴子預先設定乙個數 或稱定數 用最後乙隻猴子的定數d,從第一只猴子開始報數,報到d的猴子即退出圈子 當某只猴子退出時,就用它的定數決定它後面的第幾隻猴子將在下次退出。如此不斷迴圈,最後剩下的乙隻猴子就選...

猴子選大王問題

猴子選大王 亞瑟夫換 的問題是資料結構和演算法中常見的一類問題。可以使用迴圈佇列實現,也可以使用鍊錶實現。還可以使用陣列的回溯法實現。m只猴子要選大王,選舉辦法如下 所有猴子按1,2 n編號圍成一圈,從第一號開始順序1,2 m,凡是報m號的退出圈外,如此迴圈報數直到圈內只剩乙隻猴子時這只猴子就是大王...

猴子選大王問題

創立乙個記錄編號的陣列,用指標在這個陣列迴圈移動計數,當計數為m時將這個元素做移除標記,直到剩下最後乙個元素。1 intmain 211 int p v 0 12 int z 0,x 1,co 1 z為剔除元素個數,x為元素在陣列中位置,co為計數 13for 1423 p 24 x 25 26if...