51Nod 1073 約瑟夫環

2021-08-09 16:49:43 字數 939 閱讀 9349

1073 約瑟夫環

題目

n個人坐成乙個圓環(編號為1 - n),從第1個人開始報數,數到k的人出列,後面的人重新從1開始報數。問最後剩下的人的編號。

例如:n = 3,k = 2。2號先出列,然後是1號,最後剩下的是3號。

input

2個數n和k,表示n個人,數到k出列。(2 <= n, k <= 10^6)

output

最後剩下的人的編號

input示例

3 2output示例

3題意:中文題,典型的約瑟夫問題。

題解:約瑟夫問題可以通過反向來解決,也可先找出每一次出列的數字與前面的對應規律,因為報數是按環報數的,             到達最後需要重新開始,所以沒明顯需要用到取餘的操作,為了不衝突n%n=0的問題,可以將編號都減一,               所以最後出列的數在最後一次的編號即為0,那麼遞推一下他在上一次的編號就應該為(0+k)%2,從而得到公式   f(x)=(f(x-1)+k)%x。

ac**:

/*

* @author: 王文宇

* @date: 2017-10-23 06:22:15

* @last modified by: 王文宇

* @last modified time: 2017-10-23 14:55:40

*/#include #include #include #include using namespace std;

int n,k;

const int maxn = 1e6+7;

int f[maxn];

int main(int argc, char const *argv)

printf("%d\n",f[n]+1);

return 0;

}

51nod 1073 約瑟夫環

問題描述 n個人坐成乙個圓環 編號為1 n 從第1個人開始報數,數到k的人出列,後面的人重新從1開始報數。問最後剩下的人的編號。例如 n 3,k 2。2號先出列,然後是1號,最後剩下的是3號。輸入 2個數n和k,表示n個人,數到k出列。2 n,k 10 6 輸出 最後剩下的人的編號 樣例輸入 3 2...

51nod 1073 約瑟夫環

1073 約瑟夫環 基準時間限制 1 秒 空間限制 131072 kb 分值 0 難度 基礎題 n個人坐成乙個圓環 編號為1 n 從第1個人開始報數,數到k的人出列,後面的人重新從1開始報數。問最後剩下的人的編號。例如 n 3,k 2。2號先出列,然後是1號,最後剩下的是3號。input 2個數n和...

51Nod 1073 約瑟夫環

1073 約瑟夫環 基準時間限制 1 秒 空間限制 131072 kb 分值 0 難度 基礎題 n個人坐成乙個圓環 編號為1 n 從第1個人開始報數,數到k的人出列,後面的人重新從1開始報數。問最後剩下的人的編號。例如 n 3,k 2。2號先出列,然後是1號,最後剩下的是3號。input 2個數n和...