n个人想玩残酷的死亡游戏,游戏规则如下:
n个人进行编号,分别从1到n,排成一个圈,顺时针从1开始数到m,数到m的人被杀,剩下的人继续游戏,活到最后的一个人是胜利者。
请输出最后一个人的编号。
输入格式:
输入n和m值。 (1<=n<=100 , 1<=m<=100)
输出格式:
输出胜利者的编号。
输入样例:
5 3
输出样例:
4
Hint
第一轮:3被杀
第二轮:1被杀
第三轮:5被杀
第四轮:2被杀
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
typedef struct node { // 使用typedef后,再次定义该类型结构体可以忽略struct的书写
int data;
struct node *next;
}node;
node *creat(int n) {
node *head, *tail, *p;
p = (node*)malloc(sizeof(node));
p->data = 1;
p->next = NULL;
head = tail = p;
for ( int i = 2; i <= n; i++) {
p = (node*)malloc(sizeof(node));
p->data = i;
p->next = NULL;
tail->next = p;
tail = p;
}
tail->next = head;
return head;
}
int main() {
int n, m;
scanf("%d %d", &n, &m);
node *head, *p, *q;
head = creat(n);
q = head;
while( q->next != head )
q = q->next;
int cnt = 0;
while( q->next != q ) {
p = q->next;
cnt++;
if ( cnt == m ) {
q->next = p->next;
free(p);
cnt = 0;
}
else
q = p;
}
printf("%d", q->data);
return 0;
}