韩信点兵的算法

2023-11-18

  秦朝末年,楚汉相争,韩信率兵打仗。某次,他急需点兵迎战,就命士兵布阵三次(命3人一排,多出2名;命5人一排,多出3名;命7人一排,多出2名)后,直言有1073名勇士可击垮敌兵,其神机妙算鼓舞士气,旌旗摇动,大败楚军。

  首先这个故事的真实性很低。因为1000多名士兵布成10×10方阵也只有10个,剩下73人再排10人队就很好数。用这种简单的方法要比全军布阵3次更快速。

  其次故事中的方法在如今也不是最聪明的方法。因为令n人一排取余,再取其中完整的一队重复此算法,即可得到n进制数的表达。这个方法在面对天文数字时的处理速度应该是最快的。

  故事中的方法在如今也不是最实用的方法。因为报数要比自己去算更快。

  最后故事中的方法没有唯一解。以下是对此问题无任何经验时,最简单的算法。


		int _3 = 2, _5 = 3, _7 = 2;
		for (int t = 0; t < 10000; ++t) {
			if (_3 == _5 && _5 == _7) {
				System.out.print(_3+" ");
			}
			int min = StaticMathUtils.min(_3, _5, _7);
			if (min == _3) {
				_3 += 3;
			}
			if (min == _5) {
				_5 += 5;
			}
			if (min == _7) {
				_7 += 7;
			}
		}
	

  得到的结果为:23 128 233 338 443 548 653 758 863 968 1073 1178 1283 1388 1493 1598 1703 1808 1913 2018 2123 2228 2333 2438 2543 2648 2753 2858 2963 3068 3173 3278 3383 3488 3593 3698 3803 3908 4013 4118 4223 4328 4433 4538 4643 4748 4853 4958 5063 5168 5273 5378 5483 5588 5693 5798 5903 6008 6113 6218 6323 6428 6533 6638 6743 6848 6953 7058 7163 7268 7373 7478 7583 7688 7793 7898 8003 8108 8213 8318 8423 8528 8633 8738 8843 8948 9053 9158 9263 9368 9473 9578 9683 9788 9893 9998 10103 10208 10313 10418 10523 10628 10733 10838 10943 11048 11153 11258 11363 11468 11573 11678 11783 11888 11993 12098 12203 12308 12413 12518 12623 12728 12833 12938 13043 13148 13253 13358 13463 13568 13673 13778 13883 13988 14093 14198 14303 14408 14513 14618 14723 14828 14933 15038 15143 15248 15353 15458 15563 15668 15773 15878 15983 16088 16193 16298 16403 16508 16613 16718 16823 16928 17033 17138 17243 17348 17453 17558 17663 17768 17873 17978 18083 18188 18293 18398 

  分辨率为105,即3、5、7的最小公倍数。知道这个规律后,只要试出最小那个符合条件的数,就可以写出公式了。此案例的公式为:n = 23 + 105 × m。它是一个通解,如果韩信真用这个方法,那他目测的分辨率应达到105才行。

  如果史实如此,想必不是通过解算方程或者试验的方法得到的,而是韩信有数一下大概有多少排。这个技能是许多出纳都具备的,有难度但不稀有。1073排7排就有153列。如果10排为1方阵,就有15方阵余3排零2人。其实就是这么数出来的再验算一下,然后故弄玄虚,使人生疑。这个算法更像是冗余校验算法而不是快速计数算法。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

韩信点兵的算法 的相关文章

  • C#读取文本文件

    根据文件名到对应文件夹中读取对应文本文件 txt 并返回数据集合 使用流读取类StreamReader 一行一行读取 ReadLine 文本格式 public static List

随机推荐

  • 使用connect by进行级联查询

    connect by可以用于级联查询 常用于对具有树状结构的记录查询某一节点的所有子孙节点或所有祖辈节点 来看一个示例 现假设我们拥有一个菜单表t menu 其中只有三个字段 id name和parent id 它们是具有父子关系的 最顶级
  • Ubuntu22安装Redis

    Redis 是一个开源的在内存存储键值对数据的存储程序 它可以被用作数据库 缓存 信息暂存 并且支持各种数据结构 例如 字符串 哈希值 列表 集合等等 Redis 通过 Redis Sentinel 和 Redis 集群中多个 Redis
  • 解决谷歌人机验证(Captcha)显示问题

    文章目录 前言 一 Header Editor 下载 安装与配置 1 插件下载 2 插件安装 3 插件配置 前言 由于谷歌服务在国内不可用 所以正常访问时某些网址时 经常会出现需要人机验证的问题 影响正常使用 在不使用科学上网的情况下 我们
  • Web启动项目走Https协议(Webpack版,Umi版和Host代理版)

    需求 Web项目的启动 一般是默认的http协议 在某些业务需求时 需要走https来调试 Webpack版本 只需在webpack的devServer中配置就可以了 devServer host 0 0 0 0 port 8080 htt
  • html代码制作的个人简历源代码

  • python requests.get post

    get 方式 首先导入requests库 import requests 定义url url https baidu com 定义请求头 注意的是headers在真实环境中是有很多数据的 我们通过python传输这个数据就要以字典的方式来定
  • windows10系统提示不允许使用你正在尝试的登录方式,请联系网络管理员了解详细信息

    故障截图如图所示 排查方法 1 检查AD域用户账号登录到是否受限 2 在运行框中输入gpedit msc查看组策略 计算机配置 windows设置 本地配置 用户权限分配 拒绝本地登录 guest 参考是否与正常登录的用户电脑设置一致 允许
  • 使用ESP8266接入“天猫精灵”控制七彩灯(WS2812)的颜色/亮度-开源

    目录 演示视频 1 准备工作 1 1 原理 1 2 使用的硬件以及硬件连接图 1 3 开发环境准备 Arduino开发环境 安装ESP8266的扩展 安装blinker Arduino库 安装blinker APP 下载ws2812的驱动库
  • 树莓派_超声波传感器_三色LED

    import RPi GPIO as GPIO import time TRIG 26 ECHO 19 GREEN 6 YELLOW 5 RED 13 GPIO setmode GPIO BCM GPIO setwarnings False
  • 仿射系统和非仿射系统的数学定义

    一 非仿射系统 非仿射系统是指系统的输入是以非线性的形式出现的 例如 u 2 sin u 等 12 非仿射系统可以用下面的一般形式表示 x t f x t g x t h u t 其中 x t 是状态变量 u t 是控制输入 f x 和 g
  • Codeforces-1260-E. Tournament贪心

    题目描述 You are organizing a boxing tournament where n boxers will participate n is a power of 2 and your friend is one of
  • 利用celebA数据集训练MTCNN网络

    利用celebA数据集训练MTCNN网络 celebA数据集简介 训练数据的处理 网络和训练 侦测部分 结果展示 有问题可以联系我的邮箱 2487429219 qq com 关于MTCNN网络可以看我上一篇博客 链接 人脸检测算法 mtcn
  • 请用C + +语言写一个生成随机数程序

    include
  • windows系统更改远程桌面端口

    开启远程桌面 我的电脑属性 远程设置 步骤一 在服务器运行窗口中输入 regedit 打开注册表编辑器 步骤二 在注册表HKEY LOCAL MACHINE SYSTEM CurrentControlSet Control Terminal
  • 注解-Annotation Types学习

    前言 注解是JDK5 之后推出的特性 可修饰包 类 方法 变量等 通过在编译 加载和运行时读取其信息 可执行相应的处理 基本原理 java注解类型实质上是一个标记 如 Autowired private TestBean testBean
  • win10家庭中文版开启Hyper-V功能

    问题描述 由于win10家庭中文版是被阉割过的 有些功能就被禁用了 启用和禁用程序中就没有了Hyper V功能 如果想要更多的功能可以将系统升级成为专业版和企业版即可解决 但如果想直接在家庭中文版下创建也是可行 这里有一位大神给出了自己的方
  • LeetCode题解--160. 相交链表

    题目 编写一个程序 找到两个单链表相交的起始节点 例如 下面的两个链表 A a1 a2 c1 c2 c3 B b1 b2 b3 在节点 c1 开始相交 注意 如果两个链表没有交点 返回 null 在返回结果后 两个链表仍须保持原有的结构 可
  • html5中拖放,HTML5中的拖放

    关于HTML5中的拖放 拖放 Drag 和 Drop 是一种常见的特性 即抓取对象以后拖到另一个位置 在 HTML5 中 拖放是标准的组成部分 在HTML5中用户可以使用鼠标选择一个可拖动元素 将元素拖动到一个可放置元素 并通过释放鼠标按钮
  • OpenHarmony dump渲染和合成图层SurfaceBuffer指南

    OpenHarmony dump渲染和合成图层SurfaceBuffer指南 引言 博客停更很久了 提起笔来渐感生疏啊 看来 还是得抽出时间来更新更新啊 好了 感慨也发完了 是时候切入正题了 本篇博客主要以本人在实际项目的开发中 为了定位O
  • 韩信点兵的算法

    秦朝末年 楚汉相争 韩信率兵打仗 某次 他急需点兵迎战 就命士兵布阵三次 命3人一排 多出2名 命5人一排 多出3名 命7人一排 多出2名 后 直言有1073名勇士可击垮敌兵 其神机妙算鼓舞士气 旌旗摇动 大败楚军 首先这个故事的真实性很低