【c语言】数据结构(约瑟夫生者死者游戏的问题)

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

解法有许多种,可以用数组,应为涉及到删除操作,数组(顺序线性表)比较麻烦,但不必要删除,只需要给跳船的人(元素),赋一个值来区分就好了。

当然也可以用循环链表来做,如下;

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 struct DuLNOde{
 4
 5     int date;
 6     struct DuLNOde * next;
 7 };
 8 int main()
 9 {
10     struct DuLNOde *q=NULL;
11     struct DuLNOde *p=NULL;
12     struct DuLNOde *z=NULL;
13     q=(struct DuLNOde*)malloc(sizeof(struct DuLNOde));
14     if(!q)
15         exit(0);
16     p=q;
17     p->date=1;
18     p->next=p;
19     for(int i=2;i<=30;i++)
20     {
21         z=(struct DuLNOde*)malloc(sizeof(struct DuLNOde));
22         if(!z)
23             exit(0);
24         z->date=i;
25         z->next=p->next;
26         p->next=z;
27         p=p->next;
28     }
29     p=q;
30     for(int i=0;i<15;i++)
31     {
32         for(int j=1;j<8;j++)
33            p=p->next;
34         printf("%d\n",p->next->date);
35         p->next=p->next->next;
36         p=p->next;
37
38     }
39 }

输出结果如下:

9
18
27
6
16
26
7
19
30
12
24
8
22
5
23

  

时间: 2024-12-29 07:57:04

【c语言】数据结构(约瑟夫生者死者游戏的问题)的相关文章

数据结构设计——约瑟夫双向生死游戏

约瑟夫双向生死游戏 [问题描述]: 约瑟夫双向生死游戏是在约瑟夫生者死者游戏的基础上,正向计数后反向计数,然后再正向计数. 具体描述如下:30个旅客同乘一条船,因为严重超载,加上风高浪大,危险万分:因此船长告诉乘客,只有将全船一半的旅客投入海中,其余人才能幸免遇难.无奈,大家只得同意这种办法,并议定30个人围成一圈,由第一个人开始,顺时针依次报数,数到第9人,便把他投入大海中,然后从他的下一个人数起,逆时针数到第5人,将他投入大海,然后从他逆时针的下一个人数起,顺时针数到第9人,再将他投入大海,

读谭浩强C语言数据结构有感(1)

1.什么是数据结构? 数据结构,就是我们计算机内部的运算,编程语言的基础工作模式吧,个人总结的 = = !! 数据:说简单一点,就是计算机二进制机器码,然后通过一些复杂的操作,变为复杂的语言. 数据元素:数据有集合和元素的区别,集合里的个体就是数据元素,相对应的就是数据结构. 线性表: 说简单一点,就是线性存储结构,每个表中有大量的元素,这些元素在物理位置中都是连接起来的. 这些元素有直接前驱和直接后继.线性表的位置是相邻的. 比如,位置1,位置2,位置3......位置N. 还有一点,线性表的

C语言编写的迷宫小游戏

C语言编写的迷宫小游戏 #include <graphics.h> #include <stdlib.h> #include <stdio.h> #include <conio.h> #include <dos.h> #define N 20/*迷宫的大小,可改变*/ int  oldmap[N][N];/*递归用的数组,用全局变量节约时间*/ int  yes=0;/*yes是判断是否找到路的标志,1找到,0没找到*/ int  way[100

一些可运行的C语言数据结构代码

网上有很多C语言数据结构代码:有的不能运行:下面是一些能运行的,和运行截图:备用一下: 1 队列 #include<stdio.h> #include<stdlib.h> #define QUEUE_SIZE 50 typedef struct SeqQueue { int data[QUEUE_SIZE]; int front; int rear; }Queue; Queue *InitQueue() { Queue *q = (Queue *)malloc(sizeof(Que

空闲时间用C语言写了下2048游戏

本身这个游戏逻辑挺简单的,所以,不多说了,直接上代码吧 #include <climits> #include <cstdio> #include <cstring> #include <stack> #include <string> #include <map> #include <vector> #include <cmath> using namespace std; const int MAXX =

c语言版贪吃蛇小游戏

编译环境:windows 7 64位 编译工具:codeblocks 13.12 备注:未使用graphics.h 声明:个人原创,未经允许,禁止转载!!! 数据结构:双向链表 1.程序未使用graphis.h中的 函数,所以采用先清屏,再打印的方式显示图形,大约每秒刷新一次: 2.除蛇头元素外,其它元素的状态(行进方向)均重复前一元素: 3.蛇的图形元素为笑脸,可在源码中更改symbol参数选用不同元素. 游戏截图1                                      

C语言---数据结构(内建,数组,自定义)

数组是一组有序数据的集合,每个元素都属于同一个数据类型. 一维数组的定义: 类型符  数组名[常量表达式] 常量表达式中,可以包括常量和符号常量,int a[3+5]是合法的.但是不能包含int a[n],C语言不允许动态数组. 子函数中是可以存在int a[2*n]的,但是不能是static局部变量,因为子函数中的数据在执行时,n已经确认,可以在 栈中分配出int n[2*n]的地址空间. 在定义时,初始化: 1) int a[10] = {0,1,2,...,9};  //使用{}l=括号

使用C语言实现一个迷宫的游戏.........

#include <stdio.h> #include <stdlib.h> #include <conio.h> #include <windows.h> #include <time.h> int map[25][25] = { {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, {2,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,1}, {1

C语言实现简易2048小游戏

一直很喜欢玩这个小游戏,简单的游戏中包含运气与思考与策略,喜欢这种简约又不失内涵的游戏风格.于是萌生了用C语言实现一下的想法. 具体代码是模仿这个:https://www.cnblogs.com/judgeyoung/p/3760515.html 博主分析的都很到位,很多算法技巧都值得借鉴,C语言实现2048的主要思想已经在那个博客中详细的分析了,但是我觉得在博主的代码中还是有很多很好的思想是值得我借鉴学习的. 比如这个生成随机数,顺便规定随机数的概率: /* 生成随机数 函数定义 */ voi