圓圈中最後剩下的數字

2021-10-23 03:55:45 字數 957 閱讀 4182

題目描述:

0,1,n-1這n個數字排成乙個圓圈,從數字0開始,每次從這個圓圈裡刪除第m個數字。求出這個圓圈裡剩下的最後乙個數字。

例如:0、1、2、3、4五個數字組成乙個圓圈,從數字0開始刪除第三個數,依次刪除的前四個數字是2、0、4、1,所以圓圈中剩餘最後乙個數是3.

約瑟夫環問題

n個人圍成乙個圈,第乙個人從1開始報數,報m的將被殺掉,下乙個人接著從1開始報,如此反覆,求最後的勝利者.

上面的例題和約瑟夫問題如出一轍,所以我們接下來分析約瑟夫問題:

假設有五個人:給每個人乙個字母做編號

f(n,m)表示有n個元素,每隔m個元素進行環形刪除後最後剩下那個元素的索引號.

五個人開始,每次殺掉乙個人,去掉被殺的人,然後把殺掉那個人之後的第乙個人作為開頭重新編號。

第一次c被殺,人數變為4,d變為下一次的開頭(d索引號從3變到0)

第二次a被殺,人數變為3,b變為下一次的開頭(d索引號從0變到1)

第三次e被殺,人數變為2,b依舊為下一次開頭(d索引號從1變到1)

第四次b被殺,人數變為1,剩餘d一人,編號為0

得到公式:f(5,3) = [f(4,3)+3] % 5;

根據約瑟夫環的最終公式:

可以得到的**:

int

lastremaining

(int n,

int m)

return pos;

}

第一次接觸約瑟夫問題,如果存在問題,請及時點評。

圓圈中最後剩下的數字

1.問題描述 題目0,1.n 1這n個數字排成乙個圓圈,從數字0開始每次從這個圓圈裡刪除第m個數字。求出這個圓圈裡剩下的最後乙個數字。來自 劍指offer 2.分析 1 用環形鍊錶模擬圓圈,然後掃瞄鍊錶刪除結點,如果掃瞄到了鍊錶結尾,重新在指向鍊錶開頭以此來模擬環形鍊錶。typedef struct...

圓圈中最後剩下的數字

題目描述 每年六一兒童節,牛客都會準備一些小禮物去看望孤兒院的小朋友,今年亦是如此。hf作為牛客的資深元老,自然也準備了一些小遊戲。其中,有個遊戲是這樣的 首先,讓小朋友們圍成乙個大圈。然後,他隨機指定乙個數m,讓編號為0的小朋友開始報數。每次喊到m 1的那個小朋友要出列唱首歌,然後可以在禮品箱中任...

圓圈中最後剩下的數字

題目 0,1,n 1這n個數字排成乙個圓圈,從數字0開始每次從這個圓圈裡刪除第m個數字。求這個圓圈裡剩下的最後乙個數字。分析 1.利用環形鍊錶模擬圓圈求解。2.利用刪除之後的規律求解。環形鍊錶 class solution circleiter circlelist.begin while circ...