003问题:约瑟夫问题(筛法解决)
题目描述:
约瑟夫问题(有时也称为约瑟夫斯置换),是一个出现在计算机科学和数学中的问题。在计算机编程的算法中,类似问题又称为约瑟夫环。
人们站在一个等待被处决的圈子里。 计数从圆圈中的指定点开始,并沿指定方向围绕圆圈进行。 在跳过指定数量的人之后,执行下一个人。 对剩下的人重复该过程,从下一个人开始,朝同一方向跳过相同数量的人,直到只剩下一个人,并被释放。
问题即,给定人数、起点、方向和要跳过的数字,选择初始圆圈中的位置以避免被处决。
现在有10个人,编号依次为1~10,站成一个圈。从1号开始报数,然后是2号,3号...,每跳过5个人处决一个人。问几号活下来了?
【输入描述】
没有输入
【输出描述】
输出活下来的人的编号
【样例输入】
无
【样例输出】
1
【注释】
样例仅示意输出格式,非正确答案。
问题分析:
当读完这个这个题目的时候,我首先想到的就是用筛法解决,我们可以这样想用一个筛子——一个抽象的纸带,纸带上是由1和0组成的,且纸带足够长,其中“1”代表活着,“0”代表处死,这样就得到一串有规律的筛子,再把各个犯人的编号在这条“纸带”上循环排列,直到只剩最后一人。
代码翻译:
# include<iostream>
using namespace std;
int main()
{int i=0,j=0,count=0,k=0;bool simple=false; //循环符号;bool a[100]; //筛子int b[10]; //囚犯;for(i=0;i<100;i++) //先给筛子初始化,0代表活着,1代表死了;a[i]=true;for(i=5;i<100;i=i+6) //给筛子“打洞”,每过五个一个洞;a[i]=false;for( j=0;j<10;j++) //给囚犯初始化,值代表是否活着;b[j]=1;for(i=0,j=0;i<=10&&!simple;j++,i++) { //循环结束条件为只有一人剩下,跳出循环if(i==10) i=0;//使1~10形成一个圈;if(!b[i]) //当枚举到已死的人if(i<9) //且人编号小于10时b[i+1]=a[j],i=i+1; //跳到下一位;elseb[0]=a[j]; //大于或等于9时,重新循环;elseb[i]=a[j];k=0, count=0;//计数模块;while(k<10){if(b[k]) count++;k++;}if(count==1)simple=true;}for(j=0;j<10;j++){if(b[j]) cout<<j+1<<endl;}return 0;
}
运行结果:
当然解法肯定不只有这种,欢迎各位在评论区提供思路,同时欢迎各位如果此方法还有好的优化方法,也欢迎提出!
003问题:约瑟夫问题(筛法解决)相关推荐
- php约瑟夫问题,php 解决约瑟夫问题实现方法
这篇文章主要为大家详细介绍了php 解决约瑟夫问题实现方法,具有一定的参考价值,可以用来参考一下. 对php解决约瑟夫问题的两段代码感兴趣的小伙伴,下面一起跟随512笔记的小编两巴掌来看看吧! 一群猴 ...
- 双向链表:P1996约瑟夫问题的解决方法
题目 题目链接:here 这道题的思路应该不难,使用双向链表,假设我们输入10 3,一共10个人,我们把这10个人放进一个双向链表里面,遍历,设置count=1,一个一个匹配:刚开始是1号,1号的时候 ...
- 烽火算法题 报数问题(不是约瑟夫环)双向链表 Java实现与C实现
报数问题 报数问题 解答 1.题目要求 2.解题思路 3.代码实现 3.1 java版本 3.2 c版本 4.问题总结 报数问题 时间限制:3000MS 内存限制:589824KB 题目描述: 当n个 ...
- 数据结构与算法: 约瑟夫问题(丢手绢)
数据结构与算法: 约瑟夫(丢手绢)问题(单向链表,双向链表解决) Tips: 采用java语言, 关注博主,底部附有完整代码 采用到的知识点: 单向环形链表 双向环形链表 单向 / 双向 环形链表出圈 ...
- 约瑟夫问题(算法设计与C代码实现)
约瑟夫问题 看到了这里,想必大家都已知道约瑟夫问题,这里就不多赘述,只是简单回顾一下问题的描述. "据说著名犹太历史学家Josephus有过以下的故事: 在罗马人占领乔塔帕特后,39个犹太人 ...
- 小猪的猪栏文章类目导航
小猪的猪栏文章类目导航 标签:CSDN 前言 刚接触CSDN是在2013年10月的时候,掐指一算,也有4个年头了,从刚开始用 来转载别人的文章,到慢慢用来写自己的学习记录,去机房或者图书馆不用随身 带 ...
- 热力学分布用matlab,热力学matlab
东南大学能源与环境学院课程作业报告作业名称:传热学大作业--利用 matlab 程序解决热传导问题院系:能源与环境学院 专业:建筑环境与设备工程学号: 姓名: 2014 年 ...... 并用高性能语 ...
- javaEE面试重点
Hibernate工作原理及为什么要用? 原理: 1. 读取并解析配置文件 2. 读取并解析映射信息,创建SessionFactory 3. 打开Sesssion 4. 创建事务Transation ...
- PHP解决约瑟夫环问题
PHP解决约瑟夫环问题 一.总结 二.PHP解决约瑟夫环问题 约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围.从编号为k的人开始报数,数到 ...
最新文章
- 常用巡检语句(oracle)
- 查询oracle sql语句执行最慢和执行最多的语句!
- exe文件图标变成了白色无图标
- Python连接Mysql数据库SQL注入问题的解决
- SAP 采购订单税金抓取方法
- 用户管理:搭建系统微服务
- slider节点透明背景_【Cocos Creator 实战教程(1)】——人机对战五子棋(节点事件相关)...
- Docker 从Dockerfile 构建镜像 :build 命令的用法
- 天气数据获取接口和网址汇总
- [转]解决微信及360浏览器无法读取本地图片问题
- 最全数据结构详述: List VS IEnumerable VS IQueryable VS ICollection VS IDictionary
- 实战百度竞价恶意点击心得
- [高光谱] Hyperspectral-Classification Pytorch 数据集的读取、划分、加载
- 记Ubuntu20.04搭建jekyll博客+github环境踩坑-终结版
- 优秀网站源码、编程源码大全
- Day754.Pika键值对数据库 -Redis 核心技术与实战
- RPA---Uipath Try Catch
- Week3 Syntactic Parsing(句法分析)
- vue项目使用Hbuilder打包苹果IOS-App详细教程
- 一起装逼!开平方的七种算法