约瑟夫问题

来源:互联网 发布:排序算法有几种 编辑:程序博客网 时间:2024/06/06 14:20

约瑟夫问题

Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^

题目描述

n个人想玩残酷的死亡游戏,游戏规则如下:

n个人进行编号,分别从1到n,排成一个圈,顺时针从1开始数到m,数到m的人被杀,剩下的人继续游戏,活到最后的一个人是胜利者。

请输出最后一个人的编号。

输入

输入n和m值。

输出

输出胜利者的编号。

示例输入

5 3

示例输出

4

提示

第一轮:3被杀第二轮:1被杀第三轮:5被杀第四轮:2被杀

#include <stdio.h>#include <stdlib.h>struct node{    int data;    struct node *next;};int main(){    int n,m,i;    struct node *head,*p,*q,*tail;    head=(struct node*)malloc(sizeof(struct node));    head->next=NULL;    tail=head;    scanf("%d%d",&n,&m);    for(i=1;i<=n;i++)    {        p=(struct node*)malloc(sizeof(struct node));        p->data=i;        p->next=NULL;        tail->next=p;        tail=p;    }    tail->next=head->next;    for(i=1,p=head;;i++,head->next=p)    {if(n==1)break;        if(i%m==0)        {            q=p->next;            p->next=q->next;            free(q);n--;        }else p=p->next;    }    printf("%d",p->data);    return 0;}


0 0