题目描述:

约瑟夫问题(有时也称为约瑟夫斯置换),是一个出现在计算机科学和数学中的问题。在计算机编程的算法中,类似问题又称为约瑟夫环。

人们站在一个等待被处决的圈子里。 计数从圆圈中的指定点开始,并沿指定方向围绕圆圈进行。 在跳过指定数量的人之后,执行下一个人。 对剩下的人重复该过程,从下一个人开始,朝同一方向跳过相同数量的人,直到只剩下一个人,并被释放。

问题即,给定人数、起点、方向和要跳过的数字,选择初始圆圈中的位置以避免被处决。

现在有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问题:约瑟夫问题(筛法解决)相关推荐

  1. php约瑟夫问题,php 解决约瑟夫问题实现方法

    这篇文章主要为大家详细介绍了php 解决约瑟夫问题实现方法,具有一定的参考价值,可以用来参考一下. 对php解决约瑟夫问题的两段代码感兴趣的小伙伴,下面一起跟随512笔记的小编两巴掌来看看吧! 一群猴 ...

  2. 双向链表:P1996约瑟夫问题的解决方法

    题目 题目链接:here 这道题的思路应该不难,使用双向链表,假设我们输入10 3,一共10个人,我们把这10个人放进一个双向链表里面,遍历,设置count=1,一个一个匹配:刚开始是1号,1号的时候 ...

  3. 烽火算法题 报数问题(不是约瑟夫环)双向链表 Java实现与C实现

    报数问题 报数问题 解答 1.题目要求 2.解题思路 3.代码实现 3.1 java版本 3.2 c版本 4.问题总结 报数问题 时间限制:3000MS 内存限制:589824KB 题目描述: 当n个 ...

  4. 数据结构与算法: 约瑟夫问题(丢手绢)

    数据结构与算法: 约瑟夫(丢手绢)问题(单向链表,双向链表解决) Tips: 采用java语言, 关注博主,底部附有完整代码 采用到的知识点: 单向环形链表 双向环形链表 单向 / 双向 环形链表出圈 ...

  5. 约瑟夫问题(算法设计与C代码实现)

    约瑟夫问题 看到了这里,想必大家都已知道约瑟夫问题,这里就不多赘述,只是简单回顾一下问题的描述. "据说著名犹太历史学家Josephus有过以下的故事: 在罗马人占领乔塔帕特后,39个犹太人 ...

  6. 小猪的猪栏文章类目导航

    小猪的猪栏文章类目导航 标签:CSDN 前言 刚接触CSDN是在2013年10月的时候,掐指一算,也有4个年头了,从刚开始用 来转载别人的文章,到慢慢用来写自己的学习记录,去机房或者图书馆不用随身 带 ...

  7. 热力学分布用matlab,热力学matlab

    东南大学能源与环境学院课程作业报告作业名称:传热学大作业--利用 matlab 程序解决热传导问题院系:能源与环境学院 专业:建筑环境与设备工程学号: 姓名: 2014 年 ...... 并用高性能语 ...

  8. javaEE面试重点

    Hibernate工作原理及为什么要用? 原理: 1. 读取并解析配置文件 2. 读取并解析映射信息,创建SessionFactory 3. 打开Sesssion 4. 创建事务Transation ...

  9. PHP解决约瑟夫环问题

    PHP解决约瑟夫环问题 一.总结 二.PHP解决约瑟夫环问题 约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围.从编号为k的人开始报数,数到 ...

最新文章

  1. 常用巡检语句(oracle)
  2. 查询oracle sql语句执行最慢和执行最多的语句!
  3. exe文件图标变成了白色无图标
  4. Python连接Mysql数据库SQL注入问题的解决
  5. SAP 采购订单税金抓取方法
  6. 用户管理:搭建系统微服务
  7. slider节点透明背景_【Cocos Creator 实战教程(1)】——人机对战五子棋(节点事件相关)...
  8. Docker 从Dockerfile 构建镜像 :build 命令的用法
  9. 天气数据获取接口和网址汇总
  10. [转]解决微信及360浏览器无法读取本地图片问题
  11. 最全数据结构详述: List VS IEnumerable VS IQueryable VS ICollection VS IDictionary
  12. 实战百度竞价恶意点击心得
  13. [高光谱] Hyperspectral-Classification Pytorch 数据集的读取、划分、加载
  14. 记Ubuntu20.04搭建jekyll博客+github环境踩坑-终结版
  15. 优秀网站源码、编程源码大全
  16. Day754.Pika键值对数据库 -Redis 核心技术与实战
  17. RPA---Uipath Try Catch
  18. Week3 Syntactic Parsing(句法分析)
  19. vue项目使用Hbuilder打包苹果IOS-App详细教程
  20. 一起装逼!开平方的七种算法

热门文章

  1. 构造拉丁方阵和正交拉丁方阵组
  2. 文化产权交易系统-大盘行情实时掌控
  3. python笔记---(实验二)
  4. [转]做个男人,做个成熟的男人,做个有城府的男人
  5. No.050<软考>《(高项)备考大全》【冲刺4】《软考之 119个工具 (2)》
  6. 搜狗微信列表页数据采集之跳过验证码
  7. 群集共享卷(CSV)
  8. three.js 实现辉光(原生JS)
  9. 云服务器和虚拟主机有什么区别?哪个比较好呢?
  10. Spring Cloud Gateway +Oauth2 +JWT+Vue 实现前后端分离RBAC权限管理