9496 Josephus问题
时间限制:1000MS 内存限制:65535K
提交次数:786 通过次数:527
题型: 编程题 语言: G++;GCC
Description
编写算法解决Josephus问题:设有n个人围在一个圆桌周围,现从第s个人开始报数,数到第m个人又出列…如此反复直到所有的人全部出列为只止。
Josephus问题是:对于任意给定的n,s和m,求出按出列次序得到的n个人员的序列。
输入格式
输入表示n,s,m的三个值,用空格分隔
输出格式
输出出列序列
输入样例
8 3 4
输出样例
6 2 7 4 3 5 1 8
source----
#include<stdio.h>
int main()
{
int n,s,m;
scanf("%d %d %d",&n,&s,&m);
int i,a[10000],j[10000];
for(i=0; i<n; i++)
{
a[i]=i+1;
}
int t = 0, x = 0, k = 0;
s = s-1;
while( t < n )
{
if( a[s] != 0 )
k++;
if( k == m )
{
j[x] = a[s];
a[s] = 0;
t++;
x++;
k = 0;
}
s++;
if( s == n )
s = 0;
}
for(i=0; i<n; i++)
{
printf("%d ",j[i]);
}
}