约瑟夫问题
Time Limit: 1000MS Memory Limit: 65536KB
Problem Description
n个人想玩残酷的死亡游戏,游戏规则如下:
n个人进行编号,分别从1到n,排成一个圈,顺时针从1开始数到m,数到m的人被杀,剩下的人继续游戏,活到最后的一个人是胜利者。
请输出最后一个人的编号。
Input
输入n和m值。
Output
输出胜利者的编号。
Example Input
5 3
Example Output
4
Hint
第一轮:3被杀第二轮:1被杀第三轮:5被杀第四轮:2被杀
Author
#include <stdio.h> #include <stdlib.h> struct node { int data; struct node * next; }; int main() { int n, m, i, j; struct node *p, *head, *tail, *q; head = (struct node *)malloc(sizeof(struct node )); tail = head; scanf("%d%d", &n, &m); for(i = 0; i < n; i++) { p = (struct node *)malloc(sizeof(struct node )); p->data = i+1; tail->next = p; p->next = head->next; tail = p; } p=head; for(i = 0; i < n; i++) { for(j = 0; j < m; j++) { q = p; p = p->next; } q->next = p->next; p = q; } printf("%d\n", p->data); return 0; }