Problem Description
n个人想玩残酷的死亡游戏,游戏规则如下:
n个人进行编号,分别从1到n,排成一个圈,顺时针从1开始数到m,数到m的人被杀,剩下的人继续游戏,活到最后的一个人是胜利者。
请输出最后一个人的编号。
n个人进行编号,分别从1到n,排成一个圈,顺时针从1开始数到m,数到m的人被杀,剩下的人继续游戏,活到最后的一个人是胜利者。
请输出最后一个人的编号。
Input
输入n和m值。
Output
输出胜利者的编号。
Example Input
5 3
Example Output
4
01 | #include<stdio.h> |
02 | #include<stdlib.h> |
03 | struct node |
04 | { |
05 | int date; |
06 | struct node *next; |
07 | } *head, *tail, *p, *q; |
08 | int main() |
09 | { |
10 | int n, m, i, c = 0, d = 0; |
11 | scanf ( "%d%d" , &n, &m); |
12 | p = ( struct node *) malloc ( sizeof ( struct node)); |
13 | p -> date = 1; |
14 | p -> next = NULL; |
15 | head = p; |
16 | tail = p; |
17 | for (i = 2; i <= n; i++) |
18 | { |
19 | p = ( struct node *) malloc ( sizeof ( struct node)); |
20 | p -> date = i; |
21 | tail -> next = p; |
22 | tail = p; |
23 | p -> next = NULL; |
24 | } |
25 | tail -> next = head; |
26 | p = head; |
27 | while (p -> next != head) |
28 | { |
29 | p = p -> next; |
30 | } |
31 | while (c < n - 1) |
32 | { |
33 | q = p -> next; |
34 | d++; |
35 | if (d % m == 0) |
36 | { |
37 | p -> next = q -> next; |
38 | free (q); |
39 | c++; |
40 | } |
41 | else |
42 | { |
43 | p = q; |
44 | } |
45 | } |
46 | printf ( "%d" , p -> date); |
47 | return 0; |
48 | } |