變形的約瑟夫環問題

2021-06-28 00:36:04 字數 1081 閱讀 9285

time limit: 1 sec  

memory limit: 128 mb

submit: 142  

solved: 68 [

submit][

status][

web board]

n個站成一列的士兵和乙個整數m,士兵編號是1 --- n。每次士兵按編號從小到大的順序依次報數,如果報的數不是m的倍數,則該士兵出列。這樣重複幾次直到剩下的士兵的數量小於m為止。問最後剩下的士兵有幾個,他們的編號分別是多少。  

多組測試資料。

每組資料報含兩個數n,m。

n<=1000000000

m<=1000

當n=0,m=0時結束

每組測試資料輸出兩行。

第一行乙個數t,代表剩下的士兵數。

第二行t個數,代表剩下的士兵的編號,公升序排列。

10 3

8 30 0

192

3 6

可以找出規律來:

10 3

紅色代表下標

初始化:1 2 3 4 5 6 7 8  9 10

第一次之後:3 6 9

1 2 3

第二次之後:9(最後剩下的) 1

結束:8 3

初始話:1 2 3 4 5 6 7 8

第一次之後:3 6

1 2 結束

自己多舉幾個例子可以發現:

最後剩下的數目肯定

int cent = n/m;//表示每乙個趟有多少個下標是m的倍數

int count = 1;

while(cent >= m)//直達滿足題意

然後我們可以根據報了幾趟數字求結束時候第乙個人的最初下標

int a = 1;

for(int i = 1; i <=count ;i++)

完整**:

#include #include #include using namespace std;

int main()

cout<

HDU5643 約瑟夫環變形

題意 變形的約瑟夫環,最初為每個人編號 1到n 第 i 次刪去報號為 i 的人,然後從它的下乙個人開始重新從1開始報號,問最終剩下第幾號人 思路 媽的,我推不出來,笨方法,打表儲存,不過以後做題也可以這麼用哦 include include include include include defin...

資料結構 約瑟夫環變形

約瑟夫 joeph 問題的一種描述是 編號為1,2,n的n個人按順時針方向圍坐一圈,每人持有乙個密碼 正整數 一開始任選乙個正整數作為報數上限值m,從第乙個人開始按順時針方向自1開始順序報數,報到m時停止報數。報m的人出列,將他的密碼作為新的m值,從他在順時針方向上的下乙個人開始重新從1報數,如此下...

約瑟夫問題 約瑟夫環

約瑟夫 問題 有時也稱為約瑟夫斯置換,是乙個出現在電腦科學和數學中的問題。在計算機程式設計的演算法中,類似問題又稱為約瑟夫環。又稱 丟手絹問題 據說著名猶太歷史學家 josephus有過以下的故事 在羅馬人占領喬塔帕特後,39 個猶太人與josephus及他的朋友躲到乙個洞中,39個猶太人決定寧願死...