1197 约瑟夫问题

来源:互联网 发布:up to date数据库介绍 编辑:程序博客网 时间:2024/04/30 10:56

约瑟夫问题

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 mem{    int no;    struct mem *next;};struct mem *head = NULL,*now,*tmp;int main(){    int n,t;    int num = 0;    int kil;    scanf ("%d",&n);    t = n;    while (t--)    {        if ((tmp = malloc(sizeof(struct mem) *1)) == NULL)            return 1;        tmp->no = ++num;        tmp->next = NULL;        if (head == NULL)        {            head = tmp;            now = head;        }else        {            now->next = tmp;            now = now->next;        }    }    now->next = head;    scanf ("%d",&kil);    if (kil <= 1)        printf("0\n");    tmp = head;    while (tmp->next != tmp)    {        t = kil - 2;        while (t--)            tmp = tmp->next;        tmp->next = tmp->next->next;        tmp = tmp->next;    }    printf ("%d\n",tmp->no);    return 0;}

循环链表问题。还是蛮有意思的。
0 0
原创粉丝点击