1. 程式人生 > >C++約瑟夫問題求解

C++約瑟夫問題求解

約瑟夫問題: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; }