题目描述
编写一个程序求解约瑟夫(Joseph)问题。有n个小孩围成一圈,给他们从1开始依次编号,从编号为1的小孩开始报数,数到第m(0<m<n)个小孩出列,然后从出列的下一个小孩重新开始报数,数到第m个小孩又出列,…,如此反复直到所有的小孩全部出列为止,求整个出列序列。
输入
占一行为n和m(n<100)。
输出
整个出列序列。
样例输入 复制
6 5
样例输出 复制
5 4 6 2 3 1
#include<iostream> #include<stack> #include<vector> using namespace std; struct man { int num; int out = 0; }; int main() { int top = 0; int a = 0; int n, m; cin >> n >> m; vector<man>vec; stack<int>sta; for (int i = 1; i <= n; i++) { struct man s; s.num = i; vec.push_back(s); } for (int j = 0; j < n; j++) { while (top != m) { if (vec[a%n].out == 0) { sta.push(vec[a%n].num); top++; } a++; } vec[(a-1)%n].out = 1; cout << sta.top()<<" "; top = 0; } }
05-07
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交