约瑟夫问题
Time Limit: 1 Sec Memory Limit: 128 MB
Description
有M个人,其编号分别为1-M。这M个人按顺序排成一个圈。现在给定一个数N,从第一个人开始依次报数,数到N的人出列,然后又从下一个人开始又从1开始依次报数,数到N的人又出列...如此循环,直到最后一个人出列为止。
Input
输入只有一行,包括2个整数M(8 <= M <= 15 ),N( 5 <= N <= 32767 )。之间用一个空格分开。
Output
输出M行,每行一个整数。
Sample Input
8 5
Sample Output
5
2
8
7
1
4
6
3
HINT
Source
#include<iostream> using namespace std; main() { int a[2000],M,N,x=1; cin>>M>>N; for(int i=1;i<=M;i++) //数组赋初值,初值即为其编号 { a[i]=i; } while(M) { a[0]=a[M]; cout<<a[(N%M+x-1)%M]<<endl; if((N%M+x-1)%M==0) {x=M;} else {x=(N%M+x-1)%M;} for(int j=x;j<M;j++) {a[j]=a[j+1];} M--; } }
转载请注明出处,谢谢.Q_Q