9496 Josephus问题
Description
编写算法解决Josephus问题:设有n个人围在一个圆桌周围,现从第s个人开始报数,数到第m个人又出列…如此反复直到所有的人全部出列为只止。
Josephus问题是:对于任意给定的n,s和m,求出按出列次序得到的n个人员的序列。
输入格式
输入表示n,s,m的三个值,用空格分隔
输出格式
输出出列序列
输入样例
8 3 4
输出样例
6 2 7 4 3 5 1 8
思路:
首先可以知道一定是可循环的,那么第一个想到的是循环队列,但是有个更简单的方法就是用数组,循环可以用求余n来实现。
源码:
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int d[100000];
int main()
{
int n,s,m;
cin>>n>>s>>m;
for(int i=1;i<=n;i++)
d[i]=i;
while(n>0)
{
int flag=0;
if((s+m-1)%n!=0)