【算法与程序】三 算法实例
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
算 法 实 例
一、解析法 1.解析法概念:根据题目中给出的已知条件,找出已知条件与要求的结果之间的关系的数学表达式,并通过计算表达式来实现问题求解的方法。
2.解析法算法实例
(1)输入直角坐标系中两点坐标,计算两点间距离,并输出结果。
(2)输入圆半径,计算圆面积和周长,并输出结果。
(3)输入人民币金额,计算兑换后的美元金额并输出。(假定汇率为6.83)
二、枚举法
1.枚举算法的概念
列出各种可能的情况并逐一进行检验,根据检验的结果执行相应的操作。 “枚”就是一个一个;“举”就是列举。核心:不遗漏不重复。枚举算法充分利用了计算机“运行速度快、不知疲倦”的优势。
2.枚举算法的结构特点
● 列举——由循环结构实现 ● 检验——由分支结构实现
因此,枚举算法的一般结构是:循环结构中嵌套分支结构。
3.枚举算法的设计步骤 ● 确定列举的范围——不能随意扩大和缩小
范围,否则会造成重复或漏解。
● 明确检验的条件——根据检验的对象来设定条件,以及检验后所执行的相关操作。
● 确定循环控制的方式和列举的方式——借助循环变量的变化来列举,或通过输入。
4.枚举算法实例
通过输入的数据作为检验的对象。
(1)输入10个数,分别统计正数和负数的个数 (2)输入5个成绩,统计其中100分的人数
这两个问题也采用了枚举算法的思想,从结构上看,都是循环结构嵌套分支结构。所检验的对象是通过键盘输入的数据。
通过循环变量的变化来作为检验的对象。 以下6
个实例是不需要输入语句的,因为检验的对象正好包含循环变量的变化。
(1)打印出1-1000以内能同时被7和11整除的自然数。 (变量 n 表示这个自然数,列举范围从1—1000)
(2)找水仙花数:一个三位数,各个位置上的数字的立方和等于该数本身 (变量 n 表示这个三位数,列举范围从100—999)
(3)鸡兔同笼:20只头,56只脚,问鸡、兔各有几只? (变量 x 表示鸡的个数,列举范围从1—20)
(4)涂抹单据:一张单据上的5位数号码,千位和百位数字已经模糊不清 “1XX47” ,但这个5位数是57或67的倍数。 (变量 x 表示这个两位数,列举范围从0—99)
(5)包装600个变形金刚,小盒每盒12个,大盒每盒15个。盒数都不能为0。输出所有可能的包装方案。
(变量 s 表示小盒子的数量,列举范围从1—50,不包括50)
(6)等式成立:34*8□56 = 43*65□8 使等式成立的数字是什么?
(变量 n表示这个数,列举的范围从0—9
)
三、数组
数组是一种特殊的变量,它在内存中的位置是连续的,利用数组中各个元素下标的连续性的特点,可以采用循环结构对各个元素进行赋值或运算。 【实例】数组的输入与逆序输出
四、查找
1、顺序查找:按照数组元素的先后次序,从第一个元素开始进行遍历,逐个检验是否和关键字相等,找到了即退出。
2、对分查找:先取数组中间的元素和关键字比较,若不相等则缩小近一半的查找范围,在剩下的元素中继续查找。 由于对分查找每查找一次,查找范围就缩小一半,因此对分查找的效率要远高于顺序查找,但它的前提是:待查找的数据必须是有序的。
五、排序
1、冒泡排序:
● 从最下面一个元素起,自下而上地比较相邻两个元素中的数据,将较小的数值交换到上面一个元素。重复这一过程,直到处理完最后两个元素中的数据,称为一遍加工。此时,最小的数据已经上升到第一个元素的位置。 ● 然后对余下的i-1个元素重复上述过程。
● 由于每一遍加工都是将最小的元素像气泡一样浮至顶端,故称为冒泡排序。 例如:有
到第一个元素中。完成第一遍加工。
●然后对余下的i-1个元素重复上述过程。
●在每一遍加工中,只需交换一次位置即可
例如:有
选择排序实际上是一种优化了的排序方法,它和冒泡排序的区别在于减少了交换的次数,在每一遍的加工过程中,选择排序采用的方法是通过遍历,记录下最值的位置,最后再将最值所在位置的数据与待排元素所在的位置进行交换,因此每一遍加工只需交换依次位置。大大减少了算法的复杂度。
六、擂台法
【实例】已知数组d 中已经存放了10个数,输出其中的最大值。
采用“擂台法”,用变量k 跟踪当前的最大值,思路如下: ● 先假设d(1)中的数据是当前的最大值,即k=d(1)
● i 从2开始,直至10,用d(i)的值与当前的最大值k 进行比较,若d(i)大,则将d(i)放置在k 中,否则,k 的值不变 ● 重复上面的步骤,直至i 变至10 ● 输出k 的值即为最大值 算法流程图如下图左。
如果还需输出最大值所在的位置,则还需跟踪数组元素的下标。如下图右。