c语言实现约瑟夫生者死者游戏(附有详细代码)

阅读: 评论:0

c语言实现约瑟夫生者死者游戏(附有详细代码)

c语言实现约瑟夫生者死者游戏(附有详细代码)

 Reborn Terran Emperor

任务描述

约瑟夫生者死者游戏的大意是:30个旅客同乘一条船,因为严重超载,加上风高浪大,危险万分;因此船长告诉乘客,只有将全船一半的旅客投入海中,其余人才能幸免遇难。无奈,大家只得同意这种办法,并议定30个人围成一圈,由第一个人开始,依次报数,数到第9人,便把他投入大海中,然后从他的下一个人数起,数到第9人,再将他投入大海,如此循环,直到剩下15个乘客为止。问哪些位置是将被扔下大海的位置。

问题建模分析

本游戏的数学建模如下:假设n个旅客排成一个环形,依次顺序编号1,2,…,n。从某个指定的编号开始,沿环计数,每数到第m个人就让其出列,且从下一个人开始重新计数,继续进行下去。这个过程一直进行到剩下k个旅客为止。 本游戏的要求用户输入的内容包括:

  1. 旅客的个数,也就是n的值;
  2. 离开旅客的间隔数,也就是m的值;
  3. 所有旅客的序号作为一组数据要求存放在某种数据结构中。 本游戏要求输出的内容是包括
  4. 离开旅客的序号;
  5. 剩余旅客的序号; 所以,根据上面的模型分析及输入输出参数分析,可以定义一种数据结构后进行算法实现。

#include <stdlib.h>
#include <stdio.h> 
/*思路:1.建立循环链表
2.创建两个链表,一个用来存放死者(数组也行)(链表太麻烦了,先用数组吧,数组不好传递,主要是忘了,还的是链表),一个用来存放总人数以及剩下的人
3.需要的函数或者方法:建立新节点并赋值,尾插法,删除结点,输出两个链表,算了别搞函数了,传递太烦了,嗯,有时间再写封装函数的 *///建立结构体 
struct node{int num;//存放序号struct node *next; 
}; int main()
{int n,m,k;//依次对应总人数,隔几个死一个,剩下几个scanf("%d %d %d",&n,&m,&k);//创建链表 struct node *head, *tail,*p,*q;//头结点和尾结点 head = (struct node *)malloc(sizeof(struct node));head->next = NULL;//创建头结点 tail=head;for(int i=1;i<=n;i++)//尾插法建立循环表 {p = (struct node *)malloc(sizeof(struct node));p->num=i;tail->next=p;p->next=head->next;tail=p;}//删除结点 int i=1,j=0,l;int a[100];//存放死者 p = head->next;     //后结点q = tail;          //前结点while(n!=k){if(i!=m){q = p;p = p->next;i++;}else if(i==m){l=head->next->num;q->next = p->next;a[j]=p->num;j++;free(p);p = q->next;if(head->next->num!=l)//这一步是让p移动到循环表的开头,因为删除结点时极大可能会把头结点指向的第一个结点干了,那头结点就会变成野指针 {head->next=p;}i = 1;n--;}}//输出链表和数组printf("死者顺序:");for(int w=0;w<j;w++){printf("%d ",a[w]); }printf("n");printf("生者:");//遍历循环表,这里知道了循环表还剩下多少个元素,可以取巧遍历 
//	while(p->num>p->next->num)//这一步是让p移动到循环表的开头,因为删除结点时极大可能会把头结点指向的第一个结点干了,那头结点就会变成野指针 
//	{							//这一步真难,想了好久,垃圾小陈。单向链表这里还是有问题,唉,双向链表可以这么思考 
//		p=p->next;
//	}struct node *list;list=head->next;for(int w=0;w<k;w++){printf("%d ",list->num);list=list->next;} }

本文发布于:2024-01-31 03:48:11,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170664409425176.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:约瑟夫   死者   语言   代码   详细
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23