SDUT OJ 约瑟夫问题——链表

来源:互联网 发布:淘宝预热商品怎么删除 编辑:程序博客网 时间:2024/06/05 04:43



约瑟夫问题

Time Limit: 1000MS Memory limit: 65536K

题目描述

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

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

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

输入

输入n和m值。

输出

输出胜利者的编号。

示例输入

5 3

示例输出

4

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



约瑟夫问题

Time Limit: 1000MS Memory limit: 65536K

题目描述

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

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

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

输入

输入n和m值。

输出

输出胜利者的编号。

示例输入

5 3

示例输出

4
0 0
原创粉丝点击