题目五
周末了,ACM训练队的队员准备玩玩游戏,娱乐一下,队长想了一个好主意,所有队员站成一个圈,从1开始报数,凡是报出指定数字的人要出列。有人出列后,下个人重新从1开始报数。最后一位“幸存者”要给大家表演个节目。由于队员正在不断的壮大,小张想知道他是否需要准备表演,请你设计个程序,帮他确定他是否是“幸存者”。
【输入】
第一行是n,有n次游戏,第二行是 m x,表示某次游戏有m个人,指定被请出列的数字为x。其中n<100,m<1000
【输出】
最后幸存的那位的原来的号码。
【样例输入】
1
10 5
【样例输出】
3
#include <stdio.h>
int main()
{
int n;
int i = 0;
scanf("%d", &n);
while (i < n)
{
int m; //人数
int x; //指定出列的数字
int j;
int a; //结果
scanf("%d%d", &m, &x); // 人数 出列的数字
a = 1;
for (j=2; j<=m; j++)
{
a = (a + x - 1) % j + 1; //为了防止 if (f[n]==0) f[n]=n;
}
printf("%d\n", a);
i++;
}
return 0;
}
简化 可以先以0-n-1的方式排成序列 最后结果加1
#include <stdio.h>
int main()
{
int n;
int i = 0;
scanf("%d", &n);
while (i < n)
{
int m; //人数
int x; //指定出列的数字
int j;
int a; //结果
scanf("%d%d", &m, &x); // 人数 出列的数字
a = 0;
for (j=2; j<=m; j++)
{
a = (a + x ) % j;
}
printf("%d\n", a+1);
i++;
}
return 0;
}