[1197]约瑟夫问题 (循环链表)SDUT
2014-08-28 14:59
260 查看
约瑟夫问题
Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^题目描述
n个人想玩残酷的死亡游戏,游戏规则如下:n个人进行编号,分别从1到n,排成一个圈,顺时针从1开始数到m,数到m的人被杀,剩下的人继续游戏,活到最后的一个人是胜利者。请输出最后一个人的编号。输入
输入n和m值。输出
输出胜利者的编号。示例输入
5 3
示例输出
4
#include <stdio.h>#include <stdlib.h>struct node{int data;struct node *next;};int n,m;struct node *creat()//循环链表的建立{struct node *head,*tail,*p;int i;head=(struct node *)malloc(sizeof(struct node));head->next=NULL;head->data=1;//此处头结点并不是虚节点tail=head;for(i=2;i<=n;i++){p=(struct node *)malloc(sizeof(struct node));p->data=i;p->next=NULL;tail->next=p;tail=p;}tail->next=head;//让最后一个节点指向头结点(循环链表建立的关键)return head;};void baoshu(struct node *head)//报数过程的操作{int num=0;//猴子报数的计数变量int count=0;//统计被杀的人的个数struct node *p,*q;q=head;while(q->next!=head)q=q->next;p=head;while(count!=n-1){num++;if(num%m==0)//数到m的人被删{q->next=p->next;free(p);p=q->next;count++;}else{q=p;p=p->next;}}printf("%d\n",q->data);}int main(){struct node *head;scanf("%d %d",&n,&m);head=creat();baoshu(head);return 0;}[/code]
相关文章推荐
- sdut 1197-约瑟夫问题(循环链表)
- [1197]约瑟夫问题 (循环链表)SDUT
- SDUTOJ 1197 约瑟夫问题——循环链表解法数学解法和循环队列
- SDUT 1197----约瑟夫问题
- 约瑟夫问题-sdut 1197
- sdut1197约瑟夫问题
- SDUT 1197 约瑟夫问题
- SDUT 1197 约瑟夫问题
- 循环链表-约瑟夫问题-猴子选大王
- 用循环链表实现约瑟夫问题
- 数据结构学习中的简单问题(二):用循环链表求解简单约瑟夫问题
- 循环链表与约瑟夫问题
- 1197 约瑟夫问题
- 约瑟夫问题的数学角度分析 C 数组实现 循环链表实现 递归实现时间复杂度O(logN)
- (2011.11.20)02_循环链表举例_约瑟夫(Joseph)环问题.cpp
- 【数据结构和算法分析】循环链表及约瑟夫问题
- 【2056】不敢死队问题(循环链表)SDUT
- 约瑟夫问题(带头节点的循环链表)
- Josephus(约瑟夫)问题----分别用循环链表和数组实现
- 约瑟夫问题-----循环链表