【算法与程序】三 算法实例

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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 的值即为最大值 算法流程图如下图左。

如果还需输出最大值所在的位置,则还需跟踪数组元素的下标。如下图右。

相关文档
最新文档