约瑟夫环

题目描述

n个人(n<=100)围成一圈,从第一个人开始报数,数到m的人出列,再由下一个人重新从1开始报数,数到m的人再出圈,……依次类推,直到所有的人都出圈,请输出依次出圈人的编号.

经典的约瑟夫环!   f(n,k)=(f(n-1,k)+k)%n  详情看着篇 :  http://www.tuicool.com/articles/yMniuq

代码如下:

 1 #include <bits/stdc++.h>
 2 
 3 using namespace std;
 4 int n,m;
 5 queue<int>q;
 6 int main()
 7 {
 8     scanf("%d%d",&n,&m);
 9     for (int i=1;i<=n;++i)
10     q.push(i);
11     int i=1;
12     while (!q.empty())
13     {
14         if (i==m)
15         {
16             printf("%d",q.front());
17             if (q.size()!=1)
18             printf(" ");
19             else
20             printf("
");
21             q.pop();
22             i=1;
23         }
24         q.push(q.front());
25         q.pop();
26         i++;
27     }
28     return 0;
29 }
原文地址:https://www.cnblogs.com/agenthtb/p/5866656.html