趣味算法------约瑟夫环

news2024/9/22 11:41:38


目录

问题概述:

问题解析:

图文示意:

处决开始:

 

第一轮结束:

 第二轮结束:

最后一轮:

寻找规律:

最终思路:

具体代码:

总结:


问题概述:

        在犹太战争期间,约瑟夫与多名犹太士兵被困在一个洞穴中,面临被罗马军队俘虏的危险。为了避免成为罗马人的奴隶,士兵们决定由顺时针从第一个人开始处决他旁边的人,下一个人再处决他旁边的人,直到剩最后一个人自尽。但是约瑟夫想向罗马人投降,但是他也不敢暴露自己的想法,最后约瑟夫通过数学计算,找到了一个可以让他成为最后幸存者的位置,从而避免了死亡的命运。那么假设一共有n个人,约瑟夫应该站在第几个人的位置才能活到最后。


问题解析:

        假设现在有 8 个人,编号分别为1~8现在由第一个位置上人处决第二个位置上的人,再由第三个人处决第四个人,第一圈后还剩 1 3 5 7。然后继续 1 处决 3, 5 处决 7,还剩 1 , 5,最后 1处决 5。1活到最后。

图文示意:

处决开始:

 

第一轮结束:

1 处决 2, 3处决4,5处决6,7处决8。

 第二轮结束:

        1处决3,5处决7。

最后一轮:

        1处决5,仅剩1号位一个人。所以当人数为8人时,安全位为第一人的位置。

寻找规律:

        通过上文中的打表方式我们找出当人数为1~10时,最后存活的位置。

        这时候我们发现当士兵人数为2的幂次方时,第一个位置的人就能活到最后。实际上我们也能轻松的推导出来,假设士兵人数是2的幂次方时,每一轮都要处决一半的人,最后被处决的一定是环内最后一个人,这样下一轮第一个进行处决同伴的人一定还是第一号位置,到了最后活着的人一定还是一号位的人。

最终思路:

        假设士兵人数不为2的幂次方呢?我们要知道,士兵在互相处决的过程中,人数是一个一个 递减的,所以无论有多少人,在处决的过程中,人数一定会变成2的幂次方,然后由下一个操刀手成为一号位,他将活到最后。

        假设一共有9个人,刚开始 1处决 2,还剩8个人,8个人为2的幂次方,下一个操刀手3号位相当于活到最后的“一号位”。

        假设一共有10个人,刚开始 1处决 2,还剩9个人,然后 3 处决 4,还剩8个人,8个人为2的幂次方,下一个操刀手5号位相当于活到最后的“一号位”。

        所以当人数为 n 时,我们要找到最大不超过 n 的 2 的幂次方,然后让 n 减去该2的幂次方,得到到这个安全位置一共处决了 X 人,因为每处决一个人证明在这之前一定还有一个操刀手,安全位之前一共有 2*X 个人,最后得到安全位的位置为  2*X+1。

具体代码:

#include <stdio.h>
#include<math.h>
int main()
{
    int n;
    scanf("%d", &n);
    int num = 1;
    while (pow(2, num) <= n)//寻找刚好大于n的 2 的幂次方。
        num++;
    
    int X = n-pow(2, num - 1);//处决人数,这里num要减1。

    printf("%d", 2 * X + 1);//打印安全位置。
   
}

总结:

        该方法适用于当n的值过大,为了拓展知识面,大家可以使用数组法,递归法,链表法等等。

后来这种问题又演化成各种题目,例如循环报数,所代表的数据结构是队列。

(时间仓促,如有码字错误,请谅解。)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2047217.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Pytorch02】开发环境准备

开发环境准备 安装教程 视频 开发环境 Python 3.7 Anaconda 3.5.1CUDA 10.0Pycharm Community 检测是否安装完毕 conda --version # 检查Anaconda是否安装完毕 nvcc -V # 检查CUDA是否安装完毕

ES-分布式搜索引擎

DSL查询文档 精确查询 、 我附近的人 实例 根据页码跳转无法使用 高亮

Flandre Scarlet的精致蕾丝上半身造型,金发飘逸

Flandre Scarlet戴zun帽&#xff0c;上半身细节极其精致的蕾丝装饰&#xff0c;面带微笑&#xff0c;双臂自然下垂&#xff0c;金色头发飘逸。 正向提示词 Flandre Scarlet,zun hat,extremely detailed lace,:) , upper body,arms at sides,lace,golden hairFlandre Scarlet&…

AI学习记录 - transformers的decoder和encoder中的自注意力矩阵和掩码矩阵的数据处理

掩码掩码&#xff0c;指的是掩盖住后面的词汇的词向量对我当前词汇造成影响。把PAD字符设置成负无穷大&#xff0c;概念上不叫掩码&#xff0c;只是计算方式和掩码一样。 怎么生成掩码&#xff0c;在非掩码注意力矩阵中&#xff0c;把PAD词向量每个维度设置成负无穷大&#xf…

基于web框架的协同过滤的美食推荐系统【数据爬虫、管理系统、数据可更新、样式可调整】

文章目录 有需要本项目的代码或文档以及全部资源&#xff0c;或者部署调试可以私信博主项目介绍研究背景研究的目的与意义协同过滤算法基于用户的协同过滤算法定义基于物品的协同过滤算法的定义 数据库设计db_food&#xff08;美食信息表&#xff09;db_collect&#xff08;美食…

加载torch报错及如何解决

Failed to import pytorch fbgemm.dll or one of its dependencies is missing. 这往往是你的电脑缺少了某些微软的dll文件。所以报错了。 解决办法 前往https://www.dllme.com/dll/files/libomp140_x86_64?sortupload&arch0x8664 点击。 按照你的电脑是否为64位进行选择…

vue3-03-创建响应式数据的几种方法

响应式数据 一、 ref 创建&#xff1a;响应式数据1&#xff09;ref 创建&#xff1a;基本类型的响应式数据2&#xff09;ref 创建&#xff1a;对象类型的响应式数据3&#xff09;volar 插件自动添加 .value4&#xff09;customRef 自定义 ref 二、 reactive 创建&#xff1a;响…

联想2025校招 技术研究方向试卷

目录 1. 第一题2. 第二题 ⏰ 时间&#xff1a;2024/08/16 &#x1f504; 输入输出&#xff1a;ACM格式 ⏳ 时长&#xff1a;1.5h 本试卷还有选择题部分&#xff0c;但这部分比较简单就不再展示。 1. 第一题 题目描述 小明正在神奇苹果园里工作。这个苹果园里一共有 n n n 棵…

C#堆排序算法

前言 堆排序是一种高效的排序算法&#xff0c;基于二叉堆数据结构实现。它具有稳定性、时间复杂度为O(nlogn)和空间复杂度为O(1)的特点。 堆排序实现原理 构建最大堆&#xff1a;将待排序数组构建成一个最大堆&#xff0c;即满足父节点大于等于子节点的特性。将堆顶元素与最后…

海康VisionMaster使用学习笔记4-快速匹配模块

快速匹配模块 快速匹配包括基本参数,特征模板,运行参数,结果显示 基本参数 可以修改图像源和模块的ROI区域. 特征模版 可以配置管理所有的模版,点击创建可以新增模版,也可以通过载入加载本地的模型 建立新模版 点击创建,可以选择当前图像或本地图像进行建模 模版存图按…

【ASFF】《Learning Spatial Fusion for Single-Shot Object Detection》

arXiv-2019 https://github.com/GOATmessi7/ASFF 文章目录 1 Background and Motivation2 Related Work3 Advantages / Contributions4 Method4.1 Strong Baseline4.2 Adaptively Spatial Feature Fusion4.2.1 Feature Resizing4.2.2 Adaptive Fusion 4.3 Consistency Propert…

DVWA | CSRF(LowMedium)攻击的渗透实践

目录 概述 Low Medium 概述 CSRF&#xff08;Cross-Site Request Forgery&#xff0c;跨站请求伪造&#xff09; 是一种网络攻击方式。 通过伪造当前用户的行为&#xff0c;让目标服务器误以为请求由当前用户发起&#xff0c;并利用当前用户权限实现业务请求伪造。 例如&a…

如何将excel以文本形式储存的数字一键转换为数字

有时候一些软件给出的数据格式很恶心&#xff0c;为了方便计算常常以数字粘贴到新表&#xff0c;但随之而来新问题&#xff0c;以文本储存的公式无法用公式计算&#xff0c;怎么办啊 方法一&#xff1a;使用“转换为数字”功能 (对数字少时用&#xff09; 当Excel检测到某个单…

得到任务式 大模型应用开发学习方案

根据您提供的文档内容以及您制定的大模型应用开发学习方案&#xff0c;我们可以进一步细化任务式学习的计划方案。以下是具体的任务式学习方案&#xff1a; 任务设计 初级任务 大模型概述&#xff1a;阅读相关资料&#xff0c;总结大模型的概念、发展历程和应用领域。深度学…

STM32定时器输入捕获功能

用于测频率测占空比 IC(Input Capture)输入捕获 输入捕获模式下&#xff0c;当通道输入引脚出现指定电平跳变&#xff08;上升沿/下降沿&#xff09;时&#xff0c;会让当前CNT的值将被锁存到CCR中&#xff0c;可用于测量PWM波形的频率、占空比、脉冲间隔、电平持续时间等参数…

数字化转型底座-盘古信息IMS OS,可支撑构建MES/WMS/QCS/IoT等工业软件

在当今这个数字化浪潮汹涌的时代&#xff0c;众多企业纷纷踏上数字化转型之路。对于部分想自研工业软件的企业来说&#xff0c;一个强大、灵活且可扩展的数字化底座显得尤为重要。盘古信息IMS OS&#xff0c;&#xff0c;正是这样一款能够支撑构建MES&#xff08;制造执行系统&…

SystemUI下拉框新增音量控制条

Android产品下拉框一直只有亮度条没有音量控制条。 为了方便控制音量&#xff0c;普遍都是底部导航栏添加音量加减按钮&#xff0c;在Android10以后&#xff0c;大家普遍用上了手势导航&#xff0c;去掉底部导航栏。 目前需要再下拉框中可以直接控制音量。 文章目录 前言需求及…

Git使用方法(三)---简洁版上传git代码

1 默认已经装了sshWindows下安装SSH详细介绍-CSDN博客 2 配置链接github的SSH秘钥 1 我的.ssh路径 2 进入路径cd .ssh 文件 3 生成密钥对 ssh-keygen -t rsa -b 4096 (-t 秘钥类型 -b 生成大小) 输入完会出现 Enter file in which to save the key (/c/Users/Administrator/…

webrtc学习笔记3

Nodejs实战 对于我们WebRTC项目而言&#xff0c;nodejs主要是实现信令服务器的功能&#xff0c;客户端和服务器端的交互我们选择websocket作为通信协议&#xff0c;所以以websocket的使用为主。 web客户端 websocket WebSocket 是 HTML5 开始提供的一种在单个 TCP 连接上进行…

IIS发布打包后文件

1.打开IIS软件 2 添加网站&#xff0c; 自定义网站名称-选择要放置的资源路径-选择IP地址 3.打开放置的资源目录放置打包后文件 4.选择浏览 搜索不到IIS可进行一下操作 控制面板-程序和功能-启用或关闭windows功能-勾选IIS