OpenJudge 2746 約瑟夫問題 C++


鏈接地址:http://bailian.openjudge.cn/practice/2746

題目:

總時間限制:
1000ms
內存限制:
65536kB
描述
約瑟夫問題:有n只猴子,按順時針方向圍成一圈選大王(編號從1到n),從第1號開始報數,一直數到m,數到m的猴子退出圈外,剩下的猴子再接着從1開始報數。就這樣,直到圈內只剩下一只猴子時,這個猴子就是猴王,編程求輸入n,m后,輸出最后猴王的編號。

輸入
每行是用空格分開的兩個整數,第一個是 n, 第二個是 m ( 0 < m,n <=300)。最后一行是:

0 0

輸出
對於每行輸入數據(最后一行除外),輸出數據也是一行,即最后猴王的編號
樣例輸入
6 2
12 4
8 3
0 0
樣例輸出
5
1
7

思路:

模擬題,使用vector保存,可先手動計算結果尋找思路,再編寫代碼

代碼:

 1 #include <iostream>
2 #include <vector>
3 using namespace std;
4
5 int main()
6 {
7 int n,m;
8 cin>>n>>m;
9 while(n!=0)
10 {
11 vector<int> v;
12 for(vector<int>::size_type i = 0; i != n; ++i)
13 {
14 v.push_back(i+1);
15 }
16 int k = 0;
17 while((v.size()-1) != 0 )
18 {
19 k = (k + m - 1) % v.size();
20 v.erase(v.begin() + k);
21
22 }
23 cout<<v[0]<<endl;
24 cin>>n>>m;
25 }
26 return 0;
27 }

 


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com