排队
描述
周末了,软件ACM的队员准备玩玩游戏,娱乐一下,CY想了一个好主意,所有队员站成一个圈,从1开始报数,凡是报出指定数字的人要出列,有人出列后,下个人重新从1开始报数。最后一位“幸存者”要给大家表演个节目。由于队员正在不断的壮大,C小加又想知道他是否需要准备表演,请你设计个程序,帮他确定他是否是“幸存者”。
输入
第一行是n,有n次游戏,第二行是m,x,表示某次游戏有m个人,指定被请出列的数字为x。其中n<100,m<1000
输出
最后幸存的那位的原来的号码
样例输入
2
10 5
6 4
样例输出
3
5
代码如下:
#include <stdio.h>
#include <stdlib.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int main()
{
int m,x,i,s,n;
scanf("%d",&n);//输入n组游戏
while(n--)
{
while(~scanf("%d%d",&m,&x))
{
s=0;
for (i=2;i<=m;i++) //至少两个数字,一个数字剩余的肯定是0
s=(s+x)%i;
printf ("%d\n", s+1);
}
}
system("pause");
return 0;
}
/*
约瑟夫环问题:
总结的关系为:
f(n,m)=[f(n-1,m)+m]%n n>1
=o n=1
*/