韩信点兵程序实例
Python语言经典应用——韩信点兵

生活中的算法——“百钱买百鸡”
我国古代数学家张丘在《算经》中出了一道“百钱买百 鸡”的问题,题意是:5文钱可以买一只公鸡,3文钱可以 买一只母鸡,1文钱可以买3只雏鸡。现在用100文钱买100 只鸡,那么买到的公鸡、母鸡、雏鸡各有多少只?
在Python中,若要同时满足多个条件,需用 and 连接,即: if (x % 3 == 2 and x % 5 == 3 and x % 7 == 2):
韩信点兵
韩信带1500名兵士打仗,战死四五百人, 站3人一排,多出2人;站5人一排,多出3人;站7人一排,多出2
人。韩信很快说出人数:1073。
人。韩信很快说出人数:1073。
韩信带1500名兵士打仗,战死四五百人。 从这句话中,我们可以知道这个数的取值范围1000~1100
for x in range(1000,1100):
range( )函数:返回一个列表
函数语法 range(stop) range(start, stop[, step])
“百钱买百鸡”
韩信带1500名兵士打仗,战死四五百人。 从这句话中可以知道剩下的兵士人数应在1000~1100人之间。
接下来,我们就只需要将1000~1100(人数)之间的所有整数,一 个一个去判断它是否满足条件。
循环结构
当我们需要计算机重复做某些事情时, 可以使用循环结构来实现。根据指定条件决 定是否重复执行一条或多条指令的控制结构, 称为循环结构。
循环结构格式:
韩信点兵算法及C程序

韩信点兵时间限制:3000ms |内存限制:65535KB难度:1描述相传韩信才智过人,从不直接清点自己军队的人数,只要让士兵先后以三人一排、五人一排、七人一排地变换队形,而他每次只掠一眼队伍的排尾就知道总人数了。
输入3个非负整数a,b,c ,表示每种队形排尾的人数(a<3,b<5,c<7),输出总人数的最小值(或报告无解)。
已知总人数不小于10,不超过100 。
输入输入3个非负整数a,b,c ,表示每种队形排尾的人数(a<3,b<5,c<7)。
例如,输入:2 4 5输出输出总人数的最小值(或报告无解,即输出No answer)。
实例,输出:89#include<stdio.h>int main(){int a,b,c,m;scanf("%d%d%d",&a,&b,&c);m=(a*70+b*21+c*15);if(m>105)m=m-105;printf("%d\n",m);return 0;}三人同行七十稀,五树梅花廿一枝,七子团圆正半月,除百零五便得知。
这就是韩信点兵的计算方法,它的意思是:凡是用3个一数剩下的余数,将它用70去乘(因为70是5与7的倍数,而又是以3去除余1的数);5个一数剩下的余数,将它用21去乘(因为21是3与7的倍数,又是以5去除余1的数);7个一数剩下的余数,将它用15去乘(因为15是3与5的倍数,又是以7去除余1的数),将这些数加起来,若超过105,就减掉105,如果剩下来的数目还是比105大,就再减去105,直到得数比105小为止。
这样,所得的数就是原来的数了。
根据这个道理,你可以很容易地把前面的五个题目列成算式:1×70+2×21+2×15-105=142-105=37欢迎您的下载,资料仅供参考!致力为企业和个人提供合同协议,策划案计划书,学习资料等等打造全网一站式需求。
1.1计算机解决问题的过程

• 后来到了明代,数学家程大位用诗歌概括
了这一算法,他写道:三人同行七十稀, 五树梅花廿一枝,七子团圆月正半,除百 零五便得知。 • 指的是用除以3的余数乘以70,加上用除以 5的余数乘以21,再加上除以7的余数乘以 15,所得到的数如果大于105,就除以105, 余数就是所求。
人是如何解决问题的
1.1计算机解决问题的过程
陈朝霞
韩信点兵
• 民间传说着一则故事——“韩信点兵”,韩
信带1500名兵士打仗,战死四五百人,剩 下的人站3人一排,多出2人;站5人一排, 多出4人;站7人一排,多出6人。
韩信马上说出人数:1049
《孙子算经》中,有这样一道算术题
“今有物不知其数,三三数之剩二,五五数之剩三, 七七数之剩二,问物几何?” 按照今天的话来说:一个数除以3余2,除以5余3, 除以7余2,求这个数。 这样的问题,也有人称为“韩信点兵”.它形成了一 类问题,也就是初等数论中的解同余式。 这个算法在我国有许多名称,如“韩信点兵”, “鬼谷算”,“隔墙算”,“剪管术”,“神奇 妙算”等等,题目与解法都载于我国古代重要的 数学著作《孙子算经》中。
• 《孙子算经》有这个题目的解法。「今有物,不知其数, • • • • • •
三三数之,剩二,五五数之,剩三,七七数之,剩二,问 物几何?」 答曰:「二十三」 术曰:「三三数剩一置几何?」答曰:五乘七乘二得 之七十。 五五数剩一复置几何?答曰,三乘七得之二十一是 也。 七七数剩一又置几何?答曰,三乘五得之十五是也。 三乘五乘七,又得一百零五。 则可知已,又三三数之剩二,置一百四十,五五数 之剩三,置六十三,七七数之剩二,置三十,并之,得二 百三十三,以二百一十减之,即得。 凡三三数之剩一,则置七十,五五数之剩一,则置二十一, 七七数之剩一,则置十五,即得。」
韩信点兵程序实例

算法:解决问题的方法与步骤。每一步都必须是确 定的、能行的、不能有二义性。
穷举法就 是通过把 需要解决 问题的所 有可能情 况逐一试 验来找出 符合条件 的解的方 法 ,是 效率最低 的一种算 法,优点 是思路简 单,编程 容易。每位同 学都启动Visual Basic 程序设计环境,输入 程序代码,并调试运 行。
分析问题(找出已知和未 知、列出已知和未知之 间的关系)
写出解题步骤
结果
分析问题和解题步骤
——算法1:穷举法求解
分析问题(找出已知 和未知、列出已知 和未知之间的关系)
写出解题步骤
1、令X为1 2、如果X整除3余1,X整除5余2 设所求的数为X, ,X整除7余4,这就是题目要求 则X应满足: 的数,则记下这个X X整除3余1 3、令X为X+1(为算下一个作准 X整除5余2 备) X整除7余4 4、如果算出,则结束;否则跳 穷举法 转2 5、写出答案
士兵数:67
拓展
“韩信点兵”问题2:求整除3余1、整除5余2、 整除7余4、整除13余6、整除17余8的最小自 然数。 上机任务二:分析上述问题并写出算法, 修 改程序,调试运行,检测结果。
士兵数:18232
小结
用计算机程序解决问题的基本过程
设计算法 编写程序 调试程序 检测结果
分析问题
人工解题与计算机解题的异同点
解析法与穷举法应用实例
韩信点兵
韩信是我国西汉初著名的军事家,刘邦得天下,军 事上全依靠他。韩信点兵,多多益善,不仅如此,还能经 常以少胜多,以弱胜强。在与楚军决战时韩信指挥诸侯联 军,在垓下十面埋伏,击败楚军,楚霸王项羽因此自杀。 韩信说:“如果每3个人编为一队,那最后剩下1 个人;如果每5个人编为一队,那最后剩下2个人;如果 每7个人编为一队,最后剩下4个人。请你自己算一下, 我有多少士兵?”(假设士兵总数不超过100人)
9.算法案例(韩信点兵----孙子问题)

4.
二、范例解读
例1设计求6除余4,10除余8,9除余4的最小正整数的算法,画出流程图,写出伪代码.
例2《孙子算经》中的“物不知数”问题:
“今有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二,问物几何?”可以用下面的算法解决:先在纸上写上2,每次加3,加成5除余3的时候停下来,再在这个数上每次加15,到得出7除余2的时候,就是答数.试用流程图表示这一算法.
三、归纳点拔
课本中介绍的处理孙子问题的算法思想主要有以下几点:
1.对正整数从2开始逐一检验.
2.用While实现循环,结整数是………………………………………………………( )
A.9 B.11 C.14 D.31
2. 是一正整数,对两个正整数 ,若 是 的倍数,则称 对模 同余,用符号 表示.则下列各式中
8.对孙子算经中的“物不知数问题”,我国古代数学家程大位在其《算法统宗》(1583)中给出了这个问题的一种算法:
三人同行七十稀,五树梅花廿一枝,七子团圆月正半,除百零五便得知.
这首诗的意义是:用70乘3除所得的余数,21乘5除所得的余数,15乘7除所得的余数,然后总加起来.如果和大于105,则减105,还大再减……,最后得到的正整数就是答数了.
第 页
☆ 蔡 老 师 高 考 与 中 考 数 学 研 究 中 心 (21216123)△
第 □ 讲
第一章 算 法 初 步
9.算法案例(韩信点兵----孙子问题)
7.事实上,如果韩信点兵的传说是真事的话,用任何方法只能得到最小解和通解(最小解加上3,5,7的公倍数),韩信是如何得到具体的、精确的解的呢?在已知最小解为23的条件下,如果韩信知道人数大约在2310到2400之间,请设计算法替韩信确定具体人数.
中国剩余定理的应用实例韩信点兵

中国剩余定理的应用实例——韩信点兵物不知其数问题出自一千六百年前我国古代数学名著《孙子算经》。
原题为:"今有物不知其数,三三数之二,五五数之三,七七数之二,问物几何?"这道题的意思是:有一批物品,不知道有几件。
如果三件三件地数,就会剩下两件;如果五件五件地数,就会剩下三件;如果七件七件地数,也会剩下两件。
问:这批物品共有多少件?变成一个纯粹的数学问题就是:有一个数,用3除余2,用5除余3,用7除余2.求这个数。
这个问题很简单:用3除余2,用7除也余2,所以用3与7的最小公倍数21除也余2,而用21除余2的数我们首先就会想到23;23恰好被5除余3,所以23就是本题的一个答案。
这个问题之所以简单,是由于有被3除和被7除余数相同这个特殊性。
如果没有这个特殊性,问题就不那么简单了,也更有趣儿得多。
我们换一个例子;韩信点一队士兵的人数,三人一组余两人,五人一组余三人,七人一组余四人。
问:这队士兵至少有多少人?这个题目是要求出一个正数,使之用3除余2,用5除余3,用7除余4,而且希望所求出的数尽可能地小。
如果一位同学从来没有接触过这类问题,也能利用试验加分析的办法一步一步地增加条件推出答案。
例如我们从用3除余2这个条件开始。
满足这个条件的数是3n+2,其中n是非负整数。
要使3n+2还能满足用5除余3的条件,可以把n分别用1,2,3,…代入来试。
当n=1时,3n+2=5,5除以5不用余3,不合题意;当n=2时,3n+2=8,8除以5正好余3,可见8这个数同时满足用3除余2和用5除余3这两个条件。
最后一个条件是用7除余4.8不满足这个条件。
我们要在8的基础上得到一个数,使之同时满足三个条件。
为此,我们想到,可以使新数等于8与3和5的一个倍数的和。
因为8加上3与5的任何整数倍所得之和除以3仍然余2,除以5仍然余3.于是我们让新数为8+15m,分别把m=1,2,…代进去试验。
当试到m=3时,得到8+15m=53,53除以7恰好余4,因而53合乎题目要求。
浙教版六年级上册信息技术第12课“韩信点兵”同余法的实现课件(共21张PPT)

本课学习
同余法
“韩信点兵”问题除了通过枚举、筛选的算法思想来解决外,还可以依据同 余的算法思想解决。《孙子算经》中曾记载着利用同余思想求解的方法,这种 方法被称为“中国剩余定理”。
抽象与建模
算法设计
算法的程序实现
……
9
一、抽象与建模
10
11
二、算法设计
12
13
三、算法的程 序实现
14
15
信息技术
六年级上
第12课 “韩信点兵”同余法的实现
01 学习目标 02 本课内容 03 课堂总结 04 练习一下
2
01
学习目标
3
学习目标
你将学习
1.同余法解决问题的一般过程。 2.同余法的程序实现。
4
02
本课内容
5
本课学习
课堂引入
6
小组讨论
完成下表,你发现了什么现象?能得 出什么结论?
课堂讨论
03
课堂总结
16
课堂总结 抽象与建模 算法设计 算法的程序实现.
17
04
练习一下
18
20ThaLeabharlann k you for watching.
【2017年整理】韩信点兵问题的初等解法

【2017年整理】韩信点兵问题的初等解法“韩信点兵”问题的初等解法研究王晓东河北省卢龙县燕河营镇中学 066407韩信,是我国汉代刘邦手下的一员能征善战,智勇双全的大将。
历史上流传着一个关于他运用奇特方法点兵的传说。
有一天,韩信来到操练场,检阅士兵操练。
他问部将,今天有多少士兵操练,部将回答:“大约两千三百人。
”韩信走上点兵台,他先命全体士兵排成7路纵队,问最后一排剩几人,部将说,剩2人;他又命全体士兵排成5路纵队,问最后一排剩几人,部将说,剩3人;最后,他又让全体士兵排成3路纵队,问最后一排剩几人,部将说,剩2人。
韩信告诉部将,今天参加操练的士兵有2333人。
从现代数学的观点来看,解决韩信点兵问题,可以这样思考:设操练士兵的总数为M,则M=3x+2=5y+3=7z+2其中,x,y,z分别表示排成3路纵队,5路纵队,7路纵队的纵队数目。
求出了x,y,z以后,M也求求出来了。
而求x,y,z可以看成求方程组3x+2=5y+33x+2=7z+2的正整数解。
在上面的方程组中,未知数的个数多于方程的个数,则把这种方程(组)叫做不定方程(组)。
不定方程(组)的解是不确定的,一般不定方程总有无穷多个组解,但若加上整数(或正整数)解的特定限制,则不定方程(组)的解有三种可能:有无限组解,有限组解,或无解。
我国古代人民对于不定方程(组)这类问题解法的探讨有着悠久的历史,在中国古代的《孙子算经》中曾作为一个典型问题进行论述。
其中的一个经典例题是:今有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二,问物有几何,答曰:二十三。
术曰:三三数之剩二,则置一百四十;五五数之剩三,则置六十三;七七数之剩二,则置三十;并之得二百三十三,以二百一十减之,即得。
凡三三数之剩一,则置七十;五五数之剩一,则置二十一;七七数之剩一,则置十五。
一百(零)六以上,以一百(零)五减之,即得。
在中国民间还广为流传着一个口诀:三人同行七十稀,五树梅花二十一。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
“韩信点兵”问题1:求整除3余1、整除5余2、 整除7余4的最小自然数。
合作探究:
以小组为单位,利用已学过的数学知识找出题 目已知什么求什么、明确已知和未知之间的关系, 写出求解问题的解题步骤。并填写 “探究问题记录 表”。
ቤተ መጻሕፍቲ ባይዱ
士兵数:67
拓展
“韩信点兵”问题2:求整除3余1、整除5余2、 整除7余4、整除13余6、整除17余8的最小自 然数。 上机任务二:分析上述问题并写出算法, 修 改程序,调试运行,检测结果。
士兵数:18232
小结
用计算机程序解决问题的基本过程
设计算法 编写程序 调试程序 检测结果
分析问题
人工解题与计算机解题的异同点
分析问题(找出已知和未 知、列出已知和未知之 间的关系)
写出解题步骤
结果
分析问题和解题步骤
——算法1:穷举法求解
分析问题(找出已知 和未知、列出已知 和未知之间的关系)
写出解题步骤
1、令X为1 2、如果X整除3余1,X整除5余2 设所求的数为X, ,X整除7余4,这就是题目要求 则X应满足: 的数,则记下这个X X整除3余1 3、令X为X+1(为算下一个作准 X整除5余2 备) X整除7余4 4、如果算出,则结束;否则跳 穷举法 转2 5、写出答案
算法:解决问题的方法与步骤。每一步都必须是确 定的、能行的、不能有二义性。
穷举法就 是通过把 需要解决 问题的所 有可能情 况逐一试 验来找出 符合条件 的解的方 法 ,是 效率最低 的一种算 法,优点 是思路简 单,编程 容易。
用计算机解决问题
上机任务一:每位同 学都启动Visual Basic 程序设计环境,输入 程序代码,并调试运 行。
解析法与穷举法应用实例
韩信点兵
韩信是我国西汉初著名的军事家,刘邦得天下,军 事上全依靠他。韩信点兵,多多益善,不仅如此,还能经 常以少胜多,以弱胜强。在与楚军决战时韩信指挥诸侯联 军,在垓下十面埋伏,击败楚军,楚霸王项羽因此自杀。 韩信说:“如果每3个人编为一队,那最后剩下1 个人;如果每5个人编为一队,那最后剩下2个人;如果 每7个人编为一队,最后剩下4个人。请你自己算一下, 我有多少士兵?”(假设士兵总数不超过100人)