第05课 被涂抹数字的推算.pptVIP

  • 212
  • 0
  • 约6.12千字
  • 约 37页
  • 2020-12-22 发布于浙江
  • 举报
第05课 被涂抹数字的推算 修补轮胎 自行车胎坏掉的时候,修车师傅检查坏掉的位置,就是一个枚举算法,他选定某一个位置为起始位置,然后按顺序一块块的检查过来,找到坏掉的位置,进行修补,…… 需要注意的问题是:找到一个坏掉的位置后,还要继续找吗?为了安全起见,应该继续找。 为什么计算机能帮助人破解密码?如何从残缺不全的信息中推算出需要的信息(如从缺失的数字中推算出原有的、可能的数字)? 百钱买百鸡问题:有一个人有一百块钱,打算买一百只鸡。到市场一看,公鸡一只3元,母鸡一只5元,小鸡3只1元,试求用100元买100只鸡,各为多少才合适? 下面我们就从枚举算法的的优化、枚举对象的选择以及判定条件的确定,这三个方面来探讨如何用枚举法解题。 什么是枚举算法 由此,我们得到一个基本思想: 把问题所有可能的解,一一罗列出来并加以验证,若所罗列的结果是问题的真正解, 就予以采纳,否则就抛弃它。这就是枚举算法。 枚举法,常常称之为穷举法。在使用枚举算法的时候,即要把所有可能的情况都找出来,否则有可能会漏掉答案。 采用枚举算法解题的基本思路: (1)确定枚举对象、枚举范围和判定条件; (2)一一枚举可能的解,验证是否是问题的解 什么是枚举算法 枚举算法就是按照问题本身的性质,一一列举出该问题所有可能的解,并在逐一列举的过程中,检验每个可能解是否是问题的真正解。若是,我们采纳这个解,否则抛弃它。在列举的过程中,既不能遗漏也不应重复。 例:一份单据中被涂抹数字的推算 有一张单据上有一个5位数的编号n,如图1所示,其百位数和十位数处已经变得模糊不清,但是知道这个5位数是37或67的倍数。现要设计一个算法,找出所有满足这些条件的5位数,并统计这些5位数的个数。 (1)算法分析 ? ? 这个5位正整数n万位数事故2,千位数是5,个位数是6但是不知道百位和十位数上市什么数字。如果在这五位数的百位市十位上,分别是两个十进制数字,他就生成一个坑那个捷n,然后判断n是否是一个真正解,即n是否被37和67整除。若n是真正解,则输出n的值,并在计数器中加1,表示找到一个真正解。 这个5位正整数n中的百位和十位数有00、01、02、…、97、98、99共100种可能,分别填入,从而产生出n的全部可能解:25006、25016、25026、…、25986、25996。使用枚举算法解决问题时,必须逐一地给出所有可能解并对它们逐一进行检验,既不应遗漏任何一个可能解,也不应重复地产生和检验可能解。因而将每个可能解n逐一进行判断是否是一个真正解,即n是否能被37或67整除。若n是真正解,则输出n的值,并在计数器c中加上1,表示找到了一个真正解。 算法描述 ①、计数器c←0 ②、j←0 ③、判断j﹤100,是转④ ,否转向 ⑨ ④、可能解 n←25006+100*j ⑤、判断n是否37或67的倍数,是转向⑥ ; 否则转向⑧ ⑥、计数器c←c+1; ⑦、输出真正的解n ⑧、j←j+1;转向 ③ ⑨、输出解的个数 C ⑩、结束 (2)算法表示 程序界面图如下: 参考程序代码如下: Private Sub Command1_Click() Dim j, n, c As Integer c = 0 List1.Clear For j = 0 To 99 n = 25006 + j * 10 If n Mod 37 = 0 Or n Mod 67 = 0 Then List1.AddItem Str(n) c = c + 1 End If Next j List1.AddItem 总计有 + Str(c) + 个五位数 End Sub 在算法中使用的变量: ?? j:循环控制变量,其作用如下: ? (1)用来控制循环是否继续进行,并在循环处理过程中记录已经进行的循环的次数; ? (2)依次产生应填在百位和十位上的数值。 ?? c:计数器,记录算法执行过程中已经找到的真正解的个数。 ?? n:存储一个可能解。 数据类型 %——整型-Integer ——长整型-Long ! ——单精度浮点型-Single # ——双精度浮点型-Double @ ——货币型-Currency $——字符串型-String 例如:1.22# ’一个双精度浮点型常数。 999

文档评论(0)

1亿VIP精品文档

相关文档