问题

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

代码

#include<stdio.h>
#include<stdlib.h>typedef struct node{int id;int is_save;struct node * next;
}node;// 初始含有化num个结点的循环链表
void ds_init(node **pNode,int nums){int index=1;(*pNode) = (node *)malloc(sizeof(node));node* p;p = *pNode;p->id=index++;p->is_save=1;p->next=NULL;for(index;index<=nums;index++){node* temp=(node *)malloc(sizeof(node));temp->id=index;temp->is_save=1;p->next=temp;p = temp;}p->next=(*pNode);
}// 模拟自杀流程
void ds_process(node **pNode,int sumPeopleNum,int savePeopleNum){int temp=0;node * p = (*pNode);while(sumPeopleNum!=savePeopleNum){if(p->is_save==1){temp++;}if(temp==3){temp=0;p->is_save=0;sumPeopleNum--;}p=p->next;}printf("最后幸存%d人,所处的位置有:",savePeopleNum);for(p=(*pNode);p->next!=(*pNode);p=p->next){if(p->is_save==1){printf("%d  ",p->id);}}printf("\n");
}int main(void){node * pNode;int sump = 41,savep=2;ds_init(&pNode,sump);ds_process(&pNode,sump,savep);return 0;
}

约瑟夫问题用循环链表解决相关推荐

  1. Java 约瑟夫环(循环链表解决)

    问题描述:N个人围成一圈,从第一个开始报数,第M个将被杀掉,最后剩下一个,其余人都将被杀掉.例如N=6,M=5,被杀掉的顺序是:5,4,6,2,3,1. 解题思路:因为是围成一圈,所以用循环链表是最符 ...

  2. 循环链表解决约瑟夫环问题

    约瑟夫环问题可以简单的使用数组的方式实现,但是现在我使用循环链表的方法来实现,因为上午看到一道面试题规定使用循环链表解决约瑟夫环问题. 什么是约瑟夫环? "约瑟夫环是一个数学的应用问题:已知 ...

  3. c语言循环链表约瑟夫问题的时间复杂度,用单向循环链表解决约瑟夫问题算法优劣性分析.doc...

    用单向循环链表解决约瑟夫问题算法优劣性分析 用单向循环链表解决约瑟夫问题算法优劣性分析 摘要: 首先由简单问题引入约瑟夫问题,然后用单向循环链表解决约瑟夫问题,最后对模拟方法及数学方法的优劣性进行分析 ...

  4. 循环链表解决拉丁方阵问题 数据结构 C/C++

    循环链表解决拉丁方阵问题 1.拉丁方阵 2.问题描述 3.main函数 4.打印拉丁方阵代码 5.循环链表基本操作实现 1.拉丁方阵 拉丁方阵(英语:Latin square)是一种 n × n 的方 ...

  5. 数据结构:循环链表解决约瑟夫问题

    约瑟夫问题 问题来历 循环链表进行模拟 思路 约瑟夫问题 问题来历 据说著名犹太历史学家Josephus有过以下的故事:在罗马人占领乔塔帕特后,39 个犹太人与Josephus及他的朋友躲到一个洞中, ...

  6. 使用循环链表解决约瑟夫环问题

    1.问题来源: 据说著名犹太历史学家 Josephus有过以下的故事:在罗马人占领乔塔帕特后,39个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓到,于是决定了一 ...

  7. 循环链表解决约瑟夫问题(简化版)

    http://blog.csdn.net/jw903/article/details/38965477 约瑟夫环是一个经典的数学的应用问题:已知N个人(以编号1,2,3...N分别表示)围坐在一张圆桌 ...

  8. 【C语言】循环链表解决约瑟夫环问题

    好玩的约瑟夫环:有M个人,编号分别为1到M,玩约瑟夫环游戏,最初时按编号顺序排成队列:每遍游戏开始时,有一个正整数报数密码N,队列中人依次围坐成一圈,从队首的人开始报数,报到N的人出列,然后再从出列的 ...

  9. 约瑟夫问题,循环链表

    问题描述 传说有这样一个故事,在罗马人占领乔塔帕特后,39个犹太人与约瑟夫及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓到,于是决定了一个自杀方式,41个人排成一个圆圈,第一个人从1开始 ...

最新文章

  1. mysql数据库报错1146_关于MySQL报错:[ERR] 1146
  2. 典型相关分析(cca)原理_CCA典型关联分析原理与Python案例
  3. php 直接定义 和 construct,PHP _construct()函数讲解
  4. 计算机硬件价钱分配,电脑基础知识计算机硬件基础课件.ppt
  5. BitcoinCore JSONRPC Java使用,创建账号,获取余额,转账等等...
  6. php 过滤微信符号昵称,PHP方法处理微信昵称特殊符号过滤
  7. python进程监控 supervisor_使用Python的Supervisor进行进程监控以及自动启动
  8. jupyter notebook保存的文件在哪_通过配置文件修改jupyter notebook初始文件夹
  9. 大一笔记本电脑有用没?大一新生买什么笔记本电脑好?
  10. 隐藏windows任务栏中的窗口显示
  11. 2021-2025年中国德国航空公司试剂行业市场供需与战略研究报告
  12. Google再曝偷偷收集用户隐私,安卓苹果用户全都中招
  13. oracle的ocm怎么算通过,Oracle 11g OCM的通过祝贺信
  14. grid安装前检查报PRVE-0426:/dev/shm less than the require
  15. Python爬虫之Scrapy框架结构
  16. 关联查询objectid_SAP 删除的BOM如何查询呢?
  17. NodeJS Stream 五:双工流
  18. 在HFSS中用vbs脚本跑马灯?
  19. MMKV_MMKV简介
  20. C语言图形编程中的绘图函数~

热门文章

  1. 天翼云国产化全栈云服务 赋能数字中国建设
  2. 验证完动态目录和装环境浪费的半天
  3. nvopencv64.dll找不到程序入口点
  4. 爱奇艺Android客户端启动优化与分析(转载)
  5. Attacking the IEC-61131 Logic Engine in Programmable Logic Controllers in Industrial Control Systems
  6. 【rzxt】有什么好的措施能防止蹭网呢
  7. “errcode“:40164,“errmsg“:“invalid ip ...微信公众号开发调用失败的解决办法
  8. 梯度下降法的三种形式BGD、SGD、MBGD及python实现
  9. 盘点那些不为人知却堪称神器的8款系统管理软件
  10. 批量拆分WORD文件,批量合并WORD文件