C++約瑟夫問題求解
阿新 • • 發佈:2019-01-09
約瑟夫問題:n個騎士編號1,2,…,n,圍坐在圓桌旁。編號為1的騎士從1開始報數,報到m的騎士出列,然後下一個位置再從1開始報數,找出最後留在圓桌旁的騎士編號。
(1)編寫一個函式模板。以一種順序容器的型別作為模板引數,在模板中使用指定型別的順序容器求解約瑟夫問題。m,n是該函式模板的形參。
程式參考的輸入(數字前為提示文字):
Input n and m:7 3
程式參考的輸出:
Result:4
#include <iostream>
#include <vector>
using namespace std;
template <typename T>
int Joseph(int n,int m)
{
T v;
//vector<int>::iterator t;
for(int i=1;i<=n;i++)
{
v.push_back(i);
}
int start = 0;
//t = v.begin();
while(v.size()!=1)
{
start = (start+m-1)%v.size();
//cout << start << endl;
v.erase(v.begin()+(start));
}
return v[0];
}
int main()
{
int n,m;
cout << "Input n and m:";
cin >> n >> m;
int t = Joseph<vector<int>>(n,m);
cout << "Result:" << t << endl;
return 0;
}