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被杀
#include <stdio.h>
#include <stdlib.h>
typedef struct LNode *List;
struct LNode
{
int data;
List next;
};
int main()
{
int m,n;
scanf("%d%d",&n,&m);
List head;
List front;
int i;
for(i=1; i<=n; i++)
{
List p=(List)malloc(sizeof(struct LNode));
p->next=NULL;
p->data=i;
if(i==1)
head=p;
else
front->next=p;
front=p;
}
front->next=head;
int kk=0;
List p=head;
while(p)
{
kk++;
if(kk%m==0)
{
if(p==head)
head=p->next;//为方便删除,保证head一直指向循环内的某结点
if(p==p->next)
{
printf("%d\n",p->data);
break;
}
else
{
List t=head;
while(t->next!=p)
t=t->next;
t->next=p->next;
}
}
p=p->next;
}
return 0;
}