题目描述
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 }