用C语言模拟约瑟夫环问题
发布时间
阅读量:
阅读量
约瑟夫环问题描述
有m位参与者围成一个圆圈,每个人手中均持有特定数值。游戏从第一位人员开始,依次进行编号报数,当有人报数至n(首轮n由指定数值决定)时,该人员将被淘汰,并将其所持数值作为新的n值。随后由下一位人员继续从1开始报数,重复上述过程直至所有人员均被淘汰出局。
C语言模拟该过程算法
本方案选用包含尾节点的循环单向链表结构来保存玩家数据,其中p与pre两个指针分别用于标识当前报数节点及其前一个节点,在同步移动n-1次后,将删除p所指向的节点,持续执行此操作直至链表中不再存在任何节点。
具体代码实现
#include<stdio.h>
#include<stdlib.h>
typedef struct node{
int id;//玩家编号
int pw;//玩家持有的数字
struct node *next;
}node,*LinkList;
/*
用带头结点的尾插法创建有n个结点的循环链表,并返回尾结点
*/
LinkList CreateList(LinkList head,int n){
head->next = NULL;//头结点
head->id = 0;
node *r = head;//工作指针,跟随最后
全部评论 (0)
还没有任何评论哟~
