有n個人,圍成乙個環。從編號為1的人開始報數,每題去掉報k的人,不斷重複這個操作。
n個人的編號為1~n,如果他們的編號按順時針排成乙個圓圈,從編號1的人開始順時針報數。(報數是從1報起)當報道k的時候,這個人就退出遊戲圈。下乙個人重新從1開始報數。
最後,要求剩下的人的編號,這就是著名的約瑟夫環問題。
本題目就是已知n,k的情況下,求最後剩下的人的編號。
題目的輸入是一行,2個空格分開的整數n,k
要求輸出乙個整數,表示最後剩下的人的編號。
約定:0 例如輸入:
10 3
程式應該輸出:
4資源約定
峰值記憶體消耗,(含虛擬機器)< 256m
cpu消耗, < 1000ms
這一題,就是n個人按順時針佔成一圈.從第乙個位置開始數,數到k就將對應的位置上的人踢出局。不斷地重複次操作,直到最後剩下最後乙個人,然後輸出這個人地序號。
;//f[n}如果有n個人,從0開始報,最後剩的是誰
//有n個人,最後出局的人的編號
//f[n] = (f[n - 1] + k) % n;
intmain()
一、出隊順序
description
有m個人,其編號分別為1-m。這m個人按順序排成乙個圈。現在給定乙個數n,從第乙個人開始依次報數,數到n的人出列,然後又從下乙個人開始又從1開始依次報數,數到n的人又出列...如此迴圈,直到最後乙個人出列為止。
input
輸入只有一行,包括2個整數m(8 <= m <= 15 ),n( 5 <= n <= 32767 )。之間用乙個空格分開。
output
輸出m個數,用空格隔開
#include
using
namespace std;
const
int n =
200;
int n, k;
bool vis[n]
;int
main()
printf
("%d "
, t)
;//t為當前報數正好到k的人的編號
vis[t]
=true
;//標記這個人已經被踢出去了
tot --
;//沒報以次數,就會踢掉乙個人
}return0;
}
輸出結果:5 2 8 7 1 4 6 3
通過queue佇列來實現**
#include #include using namespace std;
int n, k;
queueq;
int main()
}return 0;
}
參 約瑟夫問題 約瑟夫環
約瑟夫 問題 有時也稱為約瑟夫斯置換,是乙個出現在電腦科學和數學中的問題。在計算機程式設計的演算法中,類似問題又稱為約瑟夫環。又稱 丟手絹問題 據說著名猶太歷史學家 josephus有過以下的故事 在羅馬人占領喬塔帕特後,39 個猶太人與josephus及他的朋友躲到乙個洞中,39個猶太人決定寧願死...
約瑟夫問題 約瑟夫環
約瑟夫問題 有時也稱為約瑟夫斯置換,是乙個出現在電腦科學和數學中的問題。在計算機程式設計的演算法中,類似問題又稱為約瑟夫環。又稱 丟手絹問題 據說著名猶太歷史學家 josephus有過以下的故事 在羅馬人占領喬塔帕特後,39 個猶太人與josephus及他的朋友躲到乙個洞中,39個猶太人決定寧願死也...
約瑟夫環問題
約瑟夫環問題 問題描述 編號是1,2,n的n個人按照順時針方向圍坐一圈,每個人持有乙個密碼 正整數 一開始任選乙個正整數作為報數上限值m,從第乙個人開始順時針方向自1開始順序報數,報到m時停止報數。報m的人出列,將他的密碼作為新的m值,從他在順時針方向的下乙個人開始重新從1報數,如此下去,直到所有人...