約瑟夫問題及其變形

2021-06-19 07:43:17 字數 550 閱讀 6031

問題:n個數排乙個圈,從編號1開始刪除,以後每m個數刪一次,問最後乙個被刪除的數。2<=n<+10000, 1<=k<=10000

#includeusing namespace std;

int main()

return 0;

}

變形:從第k個數開始刪。

#includeusing namespace std;

#define maxn 10000 + 10

int f[maxn];

int main()

{ int n, k, m;

while (cin>>n>>k>>m)

{ f[1] = 0;

for (int i = 2; i<=n; i++) f[i] = (f[i - 1] + m) % i;//找出f[n]

int ans = (k - m + 1 + f[n]) % n;//處理從k開始刪除的位置問題

if (ans <= 0) ans += n;//是負數就加一圈

cout<

約瑟夫問題與變形

1.約瑟夫問題 n個人編號為0.n 1.圍成乙個圈。從編號為0的人開始順時針計數,每數到k個人時讓其出局 第一次出局的是編號為 k 1 mod n的人 接著又從下乙個人開始計數。經過n 1輪報數後,求最終留下的人的編號。我們只關心最後乙個留下的人,比如,當刪除第乙個人後,也就是刪除編號為 k 1 m...

變形的約瑟夫環問題

time limit 1 sec memory limit 128 mb submit 142 solved 68 submit status web board n個站成一列的士兵和乙個整數m,士兵編號是1 n。每次士兵按編號從小到大的順序依次報數,如果報的數不是m的倍數,則該士兵出列。這樣重複幾...

UVa 1394 約瑟夫問題的變形

本來是要昨天來寫這學習 的,然後昨晚寢室又斷電了,忍不住在這裡吐槽一下,嗯,寢室天天斷電。題意就是輸入n,k,m三個數,n個數排成乙個圈,第一次刪除m,以後每數k個數刪除一次,求最後乙個被刪除的數。言歸正傳,以前寫過乙個鍊錶的約瑟夫問題,但是在這裡肯定是會超時的。後來看了些參考,終於明白了怎麼做。把...