数据结构C语言版:约瑟夫问题(杀人问题)

故事背景

据说著名犹太历史学家Josephus有过以下的故事:在罗马人占领乔塔帕特后,39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓到,于是决定了一个自杀方式,41个人排成一个圆圈,由第1个人开始报数,每报数到第3人该人就必须自杀,然后再由下一个重新报数,直到所有人都自杀身亡为止。然而Josephus 和他的朋友并不想遵从。首先从一个人开始,越过k-2个人(因为第一个人已经被越过),并杀掉第k个人。接着,再越过k-1个人,并杀掉第k个人。这个过程沿着圆圈一直进行,直到最终只剩下一个人留下,这个人就可以继续活着。问题是,给定了和,一开始要站在什么地方才能避免被处决?Josephus要他的朋友先假装遵从,他将朋友与自己安排在第16个与第31个位置,于是逃过了这场死亡游戏。

#include<stdio.h>typedef int ElemType;// 定义结构体
typedef struct Joseph {ElemType data;struct Joseph* next;
}Joseph;// 初始化约瑟夫环
Joseph* InitList(Joseph* J) {J = (Joseph*)malloc(sizeof(Joseph)); // 头结点J->next = J;J->data = 1; // 不带头节点的约瑟夫循环Joseph* p, * q;q = J;int People;printf("请输入约瑟夫环中有多少人:");scanf("%d", &People);for (int i = 2; i < People + 1; i++) {p = (Joseph*)malloc(sizeof(Joseph));p->data = i;p->next = J->next;J->next = p;J = p;}return q;
}// 判断约瑟夫循环的人数
int LengthList(Joseph* J) {Joseph* p;int count = 0;p = J;do {p = p->next;count++;} while (p != J);return count;
}// 输出杀人顺序
TraverseList(Joseph* J) {Joseph* p, * q, * r;p = J;q = J; // 用来查找p的前一个结点int number, count = 0;int m = LengthList(J); // 作为循环结束的条件printf("请输入数到几死:");scanf("%d", &number);printf("杀人顺序为:");while (m) {count++; // 计数器if (count == number) {printf("%d号 ", p->data);m--; // 每杀一个人,m就自减,直到为零退出循环// 寻找p的前一个结点while (q->next != p) {q = q->next;}r = p;p = p->next; // p先自己向后移动一个位置free(r); // 释放掉之前的pq->next = p; // q(原本是p的前一个结点),现在指向p,相当于删除了之前的p结点count = 0;}else {p = p->next;}}putchar('\n');
}int main() {Joseph* J = NULL;J = InitList(J);TraverseList(J);
}

数据结构C语言版:约瑟夫问题(杀人问题)相关推荐

  1. 数据结构C语言 胡学钢 PDF,数据结构(C语言版) 胡学钢.ppt

    数据结构(C语言版) 胡学钢 2.3 链表--单链表的应用(头结点) 设计算法,判断带头结点单链表L是否递增?若递增,则返回true,否则返回false. 分析: (1)链表空,返回true: (2) ...

  2. c语言 静态链表插入排序,数据结构C语言版 表插入排序

    西门豹治邺奇计 数据结构C语言版 表插入排序.txt两个人吵架,先说对不起的人,并不是认输了,并不是原谅了.他只是比对方更珍惜这份感情./* 数据结构C语言版 表插入排序 算法10.3 P267-P2 ...

  3. 为什么C语言是非形式化的,《数据结构C语言版》——绪论

    <数据结构C语言版>--绪论<笔记> 一.基本概念和术语 1.数据,数据元素, 数据项,数据对象 数据:是客观事物的符号表示,是所有能够输入到计算机中并被计算机程序处理的符号的 ...

  4. C语言中链表的英文名字,数据结构C语言版 循环链表表示和实现(国外英文).doc

    数据结构C语言版 循环链表表示和实现(国外英文) 数据结构C语言版 循环链表表示和实现(国外英文资料) Data structure, C language, circular list repres ...

  5. 数据结构(c语言版)笔记6,2020考研计算机《数据结构(C语言版)》复习笔记(6)

    2020年计算机考研复习已经开始,新东方在线在此整理了2020考研计算机<数据结构(C语言版)>复习笔记(6),希望能帮助大家! 第六章 树知识点整理 树是n个结点的有限集合,非空时必须满 ...

  6. c语言打印树形图形,数据结构C语言版树形结构.ppt

    数据结构C语言版树形结构 St中元素 算法执行的操作 ch AC k=2 , AC 建立E结点,因k=1,将其作为C结点的左孩子结点 E AC C结点进栈,k=1 ( A 建立C结点,因k=2,将其作 ...

  7. 逆置单链表c语言程序,(数据结构C语言版)顺序表和单链表的逆置

    <(数据结构C语言版)顺序表和单链表的逆置>由会员分享,可在线阅读,更多相关<(数据结构C语言版)顺序表和单链表的逆置(7页珍藏版)>请在人人文库网上搜索. 1.实验1-1顺序 ...

  8. 23V3有这种C语言表达式吗,数据结构(C语言版第2版_李云清)习题答案2012-12.doc

    数据结构(C语言版第2版_李云清)习题答案2012-12.doc 第 1 章 绪论 1.1 什么是数据结构? [答]:数据结构是指按一定的逻辑结构组成的一批数据,使用某种存储结构将这批数据存储 于计算 ...

  9. 邓公数据结构C++语言版学习笔记——二叉树

    二叉树的遍历 一. preorder--先序遍历VLR 1. 递归先序遍历 2. 迭代先序遍历 3.先序遍历图解 二. inorder--先序遍历LVR 1. 递归中序遍历 2.迭代中序遍历 3.迭代 ...

最新文章

  1. 点滴积累【C#】---操作xml,将xml数据显示到treeview
  2. 黄峥为何放手拼多多?数据揭秘电商平台布局背后逻辑
  3. GARFIELD@01-31-2005
  4. 算法设计与分析——动态规划——01背包问题
  5. SPP-net论文笔记
  6. 二阶切比雪夫多项式实现(scala版、python版)
  7. 数据库服务器sa 密码修改,修改vcenter数据库账号密码
  8. tpac100控制器设置教程_AC100基站控制器配置说明
  9. mysql 8 my.ini skip_mysql8.0版本skip-grant-tables出现的新问题
  10. 个人微信淘宝客返利机器人搭建教程
  11. 手把手教你从零开始腾讯云服务器部署
  12. element-ui表格表头内容 限制不换行
  13. 维谛技术(Vertiv):一切研发创新都以客户需求为核心
  14. 将html文件设置成桌面壁纸(含有时间罗盘源码免费文件)
  15. photoshop使用“选择并遮住”功能快速扣头发
  16. SQL Server 查看被锁的表
  17. 华为手机无法debug的问题
  18. (论文笔记07.Survivalism: Systematic Analysis of Windows Malware Living-Off-The-Land(CCF A)2021)
  19. Resolume与MA2连接问题
  20. 绿盟SecXOps安全智能分析技术

热门文章

  1. SAP标准成本计算和发布
  2. Bootstrap(六)表单样式
  3. Javascript基础知识之三(常用对象方法)
  4. SNPE教程2-量化
  5. 最近对和凸包问题的蛮力算法
  6. 常用的三种数据库创建存储过程并解析json
  7. chrome不用flash,播放流视频
  8. 易烨卿:一场虚拟世界的反歧视大战(转)
  9. 若依mybatis升级为mybatis-plus
  10. 网站优化SEO包括哪些方面