Advertisement

用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)

还没有任何评论哟~