Problem Description
n个人想玩残酷的死亡游戏,游戏规则如下:
n个人进行编号,分别从1到n,排成一个圈,顺时针从1开始数到m,数到m的人被杀,剩下的人继续游戏,活到最后的一个人是胜利者。
请输出最后一个人的编号。
Input
输入n和m值。
Output
输出胜利者的编号。
Sample Input
5 3
Sample Output
4
Hint
第一轮:3被杀第二轮:1被杀第三轮:5被杀第四轮:2被杀
Source
代码:
#include<bits/stdc++.h>
using namespace std;
struct node {
int data;
struct node *next;
};
int main (){
struct node *head,*p,*tail;
head=new node;
head->next=NULL;
p=head;
int m,n;
scanf ("%d%d",&m,&n);
for (int i=1;i<=m;i++){
tail=new node;
tail->data=i;
tail->next=NULL;
p->next=tail;
p=tail;
}
p->next=head->next;
p=head->next;
tail=head;
while(p->next->data!=p->data)
{
if(n>1)
for(int i=1;i<n;i++)
{
tail=p;
p=p->next;
}
tail->next=p->next;
p=p->next;
}
printf ("%d\n",p->data);
return 0;
}