約瑟夫問題 名單的通知

2021-09-07 01:42:08 字數 1068 閱讀 4510

之後,羅馬人占領qiaotapate。39 猶太人和josephus和他的朋友們藏在乙個山洞,39猶太人決定寧死不被敵人抓到。我決定自殺,41個人設定在乙個圓。通過節1個人報數,資料報每節數3該人就必須自殺。然後再由下乙個又一次報數,直到全部人都自殺身亡為止。然而josephus 和他的朋友並不想遵從。首先從乙個人開始,越過k-2個人(由於第乙個人已經被越過),並殺掉第k個人。接著,再越過k-1個人,並殺掉第k個人。這個過程沿著圓圈一直進行。直到終於僅僅剩下乙個人留下,這個人就能夠繼續活著。問題是,給定了和,一開始要站在什麼地方才幹避免被處決?josephus要他的朋友先假裝遵從,他將朋友與自己安排在第16個與第31個位置,於是逃過了這場死亡遊戲。

如今我們將問題一般化:n個人圍成一圈,從第乙個開始報數,第m個將被殺掉,輸出它們的死亡順序

n=41,m=3時:

宣告乙個struct,資料域記錄它的序號,指標域指向下一結點。將指標p指向第乙個結點位置,p=p->next,(後移一位置),此時要刪掉p->next所指的位置的結點temp,然後執行

p->next=p->next->next,將temp的資料輸出,然後p=p->next(即移到第四個結點).......如此往復迴圈求解

推廣到普通情況則:

m=4時,p=p-next執行2次後找到temp,m=5時,p=p->next執行3次找到temp......。對於一般的m。則(m-2)次指標位移後它的下一位置極為要刪除的位置

#include #include typedef struct node

node;

node *create(int m)

s->next = head->next;

} free(head);

return s->next;

}int main(void)

printf("->>%d\n", p->data);

if(getchar() != '#')

return 0;

}

執行結果

約瑟夫斯問題 關於約瑟夫斯問題的反饋

約瑟夫斯問題 我上週的文章是關於解決kotlin的約瑟夫斯問題的。為了便於比較,這是我最初編寫的版本 class soldier val position int fun isdead state state dead enum class state class circle private va...

約瑟夫問題的求解!

已知有n 只猴子 以編號1,2,3,n 分別表示 圍坐一圈。從第一只猴子開始,按順序從1開始報數,數到 m 的那只猴子出列 接著再從從1 開始報數,報數到 m的那只猴子又出列 依此規律重複下,直到只剩乙隻猴子為止。輸入n和m,輸出最後剩下的猴子?此問題,即報數問題,也是約瑟夫問題!很多人一開始想到是...

約瑟夫環的問題

約瑟夫環問題 假設有n個人 每當數到m的時候 就將第m個人出列 接下來從m 1個人開始從1數去 每當數到m的時候就出列 第一次出列一定是編號為 m n 1 剩下的人開始形成乙個新的約瑟夫環 從編號為m n開始計數 假設 k m n 則新的約瑟夫環為 k k 1 k 2 k 3 n 2 n 1 n 0...