2357: 贺大和他的朋友们
时间限制: 1 Sec 内存限制: 64 MB
提交: 96 解决: 53
[提交][状态][讨论版][命题人:外部导入]
题目描述
贺大和他的朋友们参加一个户外训练营。训练营的项目包括爬雪山、冬泳、孤岛生存、蹦极、跳伞等极限活动。训练营规定每天淘汰表现最差的一个人。最差人选由参加活动的营员们投票决定。最后剩下的一个人将获得训练营提供的500万大奖。
贺大和他的朋友们不想因为投票伤害彼此的友谊,于是他们决定通过做游戏来决定每天出局的人选。游戏规则是这样的:将贺大和他的朋友们 n个人进行编号,分别从1到n,排成一个圈,顺时针从1开始数到m,数到m的人出局,不再参加接下来的活动。剩下的人继续参加活动,最后出局的一个人是大奖获得者。 请输出最后一个人的编号。
输入
输入数据有多组,每组占一行,包含正整数n和m(1<=n,m<=10000)。
输出
对于每组输入数据,输出大奖获得者的编号,每个测试实例占一行。
样例输入
5 3 100 3
样例输出
4 91
提示
第一轮:3出局 第二轮:1出局 第三轮:5出局 第四轮:2出局
#include<stdio.h>
int main()
{
int n,sum;
while(scanf("%d%d",&sum,&n)!=EOF)
{
int i,t,j=0, k = 0, a[sum],b[sum];
for(i=0;i<sum;i++)
a[i]=i+1;
for(i=0;k<sum-1;i=(i+1)%sum)
{
if(a[i]!=0)
{
j++;
if(j==n)
{
j=0;
a[i]=0;
k++;
}
}
}
for(i=0;i<sum;i++)
if(a[i]!=0)
printf("%d\n",a[i]);
}
return 0;
}