算法的程序实现_第1页
算法的程序实现_第2页
算法的程序实现_第3页
算法的程序实现_第4页
算法的程序实现_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、LOGO 用解析法解决问题 什么是解析法 解析法就是在分析具体问题的基础上,抽 取出一个数学模型,这个数学模型能用若 干解析表达式表示出来,解决了这些表达 式问题也就得到了解决。解析法是程序设 计中最常用的算法之一。 解析法解决问题步骤 1、问题分析 未知-已知 数学表达式 S = (a+b)*h/2 2、编程实现 3.2 用穷举法解决问题 1什么是穷举法? 也叫枚举法、列举法 将求解对象一一列举出来,然后逐一加以分 析、处理,并验证结果是否满足给定的条件,穷举 完所有对象,问题将最终得以解决。 任务一:水仙花数 水仙花数是指一个三位数,它的各位数的立方和正 好等于该数本身。如:153=13+

2、53+33。请设计算法 求解“水仙花数问题”。 水仙花数代码: Dim x, b, s, g As Integer For x = 100 To 999 Step 1 a = i 100 b = (i - a * 100) 10 c= i - a * 100 - b * 10 If a3 + b3 + c3 = x Then Print x End If Next x 求解对象应该是有限的; 有穷举规则 一时找不出解决问题的更好途径时; 穷举法的适用条件: 穷举法解决问题步骤: 通常可以从两个方面进行分析: 确定范围:问题所涉及的情况有哪些,情 况的种数可不可以确定。 验证条件:分析出来的这些

3、情 任务二:百钱买百鸡” 相相传传我国我国南南北北朝朝时,京时,京城城有个有个卖鸡卖鸡的的张姓张姓老老汉汉,他他有一有一 个个儿儿子非常子非常聪聪明明,尤尤其其擅擅长长算算术术,到,到十十二三二三岁岁时已是时已是远远近近闻闻 名名的的“小小神童神童”了了。当。当朝宰朝宰相相听听说说后想试后想试探探个个究究竟竟,于是,于是派派 仆仆人到人到张张老老汉汉的的店店里打里打听鸡听鸡的价的价钱钱,张张老老汉汉告告知知“公公鸡五鸡五文文 钱钱一一只只,母母鸡鸡三文一三文一只只,小,小鸡鸡一文三一文三只只”。于是,。于是,仆仆人人给他给他 一一百百文文钱钱,要求公,要求公鸡鸡、母母鸡鸡、小、小鸡鸡都都要,数

4、要,数量量不多不少不多不少正好正好 一一百只百只,命他次命他次日日送送到到府府上。这可上。这可难难为为了了张张老老汉汉,他他怎怎么凑么凑 也凑也凑不不够够这个数,这个数,只只好好问问儿儿子子。“小小神童神童”不不慌慌不不忙忙,掐掐指指 一算就一算就给给出出了答了答案,案,第第二二天天照照数数送送到到宰宰相相府府。宰宰相见相见难难不不倒倒 “小小神童神童”,又让仆又让仆人人给给张张老老汉汉一一百百文文钱钱,要求,要求再再买买一一百只百只 鸡鸡,搭搭配配方法不能和上方法不能和上次次一样。结果一样。结果“小小神童神童”又又很快给很快给出出 了答了答案,案,宰宰相相暗暗暗暗称称奇奇,想最后,想最后再再

5、试一试一次次,谁谁知知还还是没有是没有难难 倒倒“小小神童神童”。 这个这个故事故事就是我国古代数学就是我国古代数学名名著著张邱张邱建建算经算经里里的的百百 鸡鸡百百钱钱问题。请用问题。请用穷举穷举法求解法求解所所有的组合方法。有的组合方法。 百钱买百鸡 确定范围 验证条件: 百钱百鸡代码: Dim x, y, z As Integer For x = 1 To 20 For y = 1 To 33 For z = 1 To 100 If (5 * x + 3 * y + 1 / 3 * z = 100) And (x + y + z = 100) Then Print x, y, z End

6、 If Next z Next y Next x End Sub 我们使用信用卡在柜员机上取钱时, 为什么系统要限制输入密码的次数? 小结 1、穷举法分析: 确定范围 验证条件 2、自觉遵守网络道德与法规 数数 组组 3.1 概 述 数组的概念:数组的概念:数组并不是一种数据类型,而数组并不是一种数据类型,而 是是一组相同类型数据一组相同类型数据的集合。用一个统一的名字的集合。用一个统一的名字 (数组名)数组名)代表逻辑上相关的一批数据,每个元代表逻辑上相关的一批数据,每个元 素用素用下标变量下标变量来区分;下标变量代表元素在数组来区分;下标变量代表元素在数组 中的位置。中的位置。 其表示形式

7、: A(1),A(10) X(1,1), X1(1,10), X(2,10) Y(0,0,0), Y(1,2,5) Visual Basic中的数组,按不同的方式可分为中的数组,按不同的方式可分为 以下几类:以下几类: 按数组的大小(元素个数)是否可以改变来 分为:定长数组、动态(可变长)数组。 按元素的数据类型可分为:数值型数组、字 符串数组、日期型数组、变体数组等。 按数组的维数可分为:一维数组、二维数组、 多维数组。 对象数组:菜单对象数组、控件数组。 3.2 一维数组一维数组 3.2.1 一维数组的声明一维数组的声明 形式: Dim 数组名数组名(to)As 或:或: Dim 数组名数

8、组名(to) 例:Dim a(1 to 10) As Integer 声明了a数组有10个元素 与上面声明等价形式: Dim a%(1 to 10) 1是下标的下界 10是下标的上界 数组元数的数据类型 说明: 1数组名的命名规则与变量的命名相同。 2数组的元素个数:上界-下界+1。 3缺省为0,若希望下标从1开始,可在模块的通用 部分使用Option Base语句将设为1。其使用格式是: Option Base 0|1 后面的参数只能取0或1 例如: Option Base 1 将数组声明中缺省下标设为1 4和不能使用变量,必须是常量,常量可 以是直接常量、符号常量,一般是整型常量。 5如果

9、省略As子句,则数组的类型为变体类型。 6数组中各元素在内存占一片连续的存储空间, 一维数组在内存中存放的顺序是下标大小的顺序, 如图5-1所示: 二、二、 排序问题排序问题 1选择法排序选择法排序 算法思想:算法思想: 1)对有)对有n个数的序列(存放在个数的序列(存放在 数组数组a(n)中),从中选出最小中),从中选出最小 (升序)或最大(降序)的数,(升序)或最大(降序)的数, 与第与第1个数交换位置;个数交换位置; 2)除第)除第1 个数外,其余个数外,其余n-1个个 数中选最小或最大的数,与第数中选最小或最大的数,与第2 个数交换位置;个数交换位置; 3)依次类推,选择了)依次类推,

10、选择了n-1次后,次后, 这个数列已按升序排列。这个数列已按升序排列。 原 始 数 据 8 6 9 3 2 7 第 1趟 交 换 后 2 6 9 3 8 7 第 2趟 交 换 后 2 3 9 6 8 7 第 3趟 交 换 后 2 3 6 9 8 7 第 4趟 交 换 后 2 3 6 7 8 9 第 5趟 无 交 换 2 3 6 7 8 9 图1-3-27 交 换 过 程 1选择法排序选择法排序 算法思想:算法思想: 1)对有)对有n个数的序列(存个数的序列(存 放在数组放在数组a(n)中),从中选中),从中选 出最小(升序)或最大(降出最小(升序)或最大(降 序)的数,与第序)的数,与第1个数

11、交换个数交换 位置;位置; 2)除第)除第1 个数外,其余个数外,其余n- 1个数中选最小或最大的数,个数中选最小或最大的数, 与第与第2个数交换位置;个数交换位置; 3)依次类推,选择了)依次类推,选择了n-1 次后,这个数列已按升序排次后,这个数列已按升序排 列。列。 For i = 1 To n - 1For i = 1 To n - 1 p = i p = i For j = i + 1 To n For j = i + 1 To n If a(p) a(j) Then p = j If a(p) a(j) Then p = j Next j Next j temp = a(i) te

12、mp = a(i) a(i) = a(p) a(i) = a(p) a(p) = temp a(p) = temp Next iNext i 选择法排序(升序)的选择法排序(升序)的VB程序程序: 2冒泡法排序(递增)冒泡法排序(递增) 算法思想:算法思想:(将相邻两个数比较,小的调到前头将相邻两个数比较,小的调到前头) 1)有)有n个数(存放在数组个数(存放在数组a(n)中),第一趟将中),第一趟将 每相邻两个数比较,小的调到前头,经每相邻两个数比较,小的调到前头,经n-1次两两次两两 相邻比较后,最大的数已相邻比较后,最大的数已“沉底沉底”,放在最后一,放在最后一 个位置,小数上升个位置,

13、小数上升“浮起浮起”; 2)第二趟对余下的)第二趟对余下的n-1个数(最大的数已个数(最大的数已“沉沉 底底”)按上法比较,经)按上法比较,经n-2次两两相邻比较后得次次两两相邻比较后得次 大的数;大的数; 3)依次类推,)依次类推,n个数共进行个数共进行n-1趟比较,在第趟比较,在第j 趟中要进行趟中要进行n-j次两两比较。次两两比较。 For i = 1 To n - 1For i = 1 To n - 1 For j = 1 To n-i For j = 1 To n-i If a(j) a(j+1) Then If a(j) a(j+1) Then temp=a(j) temp=a(j

14、) a(j)=a(j+1) a(j)=a(j+1) a(j+1)=temp a(j+1)=temp End if End if Next j Next j Next iNext i 冒泡法排序(升序)的冒泡法排序(升序)的VB程序程序: LOGO 3.5 用递归法解决问题用递归法解决问题 “从前有座山,山里有座庙,庙里有个老和尚给小和尚讲故 事,讲什么呢?从前有座山,山里有座庙,庙里有个老和尚给 小和尚讲故事,讲什么呢? 从前有座山,山里有座庙,庙里有 个老和尚给小和尚讲故事,讲什么呢? 从前有座山,山里有 座庙,庙里有个老和尚给小和尚讲故事,讲什么呢? 从前有 座山,山里有座庙,庙里有个老和

15、尚给小和尚讲故事,讲什 么呢? 从前有座山,山里有座庙,庙里有个老和尚给小和尚 讲故事,讲什么呢? 从前有座山,山里有座庙,庙里有个老和 尚给小和尚讲故事,讲什么呢? 从前有座山,山里有座庙,庙 里有个老和尚给小和尚讲故事,讲什么呢? 从前有座山,山 里有座庙,庙里有个老和尚给小和尚讲故事,讲什么呢? 从 前有座山,山里有座庙,庙里有个老和尚给小和尚讲故事, 讲什么呢?” 这个故事有什么特点?自己调用自己 如果在一个函数中,它自己调用了自己,这种现 象叫递归调用。 如果A函数调用B函数,B函数又反过来调用A函 数,那这种现象也叫做递归调用。 如果一个函数在定义时,直接或间接的调用了自己 ,这种算法在程序设计中统称为递归法。 递归法一般需要递归法一般需要定义函数定义函数来实现。来实现。 虽然VB为我们提供了大量的标准函数,但我们 在实际应用时难免有时还是找不到合意的,那就只 有自己解决了,这样为了一个特定的任务而编出来 的函数叫自定义函数。 Abs()、len()、date()、 sqr()、msgbox()等 使用递归算法必须要满足以下的递归条件:使用递归算法必须要满足以下的递归条件: ()存在递归结束条件及结束时的值 ()能用递归形式表示,且递归向终止 条件发展 兔子繁殖问题 有人养了一对兔子,这对兔子以后每 月生一对兔子,新生兔

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论