资源简介 (共21张PPT)4.1算法及其特征回 顾 旧 知大象进冰箱第一步:打开冰箱门;第二步:把大象装进去;第三步:把冰箱门关上。寻找“开关对应关系”一个房间有3盏灯,房间外有3个开关分别控制这3盏灯,在只允许进房间一次的情况下,如何判断哪个开关控制哪盏灯?活动1亮灭冷热灯的状态寻找“开关对应关系”算法寻找“开关对应关系”第一步:开1号、2号两个开关,2分 钟后关闭1号开关;第二步:进房间,显然亮着的灯由2号开关控制;第三步:摸一下另外两盏不亮的灯,发热的灯肯定由1号开关控制;第四步:确定3号开关控制的灯。流程图寻找“开关对应关系”第一步:开1号、2号两个开关,2分钟后关闭1号开关;第二步:进房间,显然亮着的灯由2号开关控制;第三步:摸一下另外两盏不亮的灯,发热的灯肯定由1号开关控制;第四步:确定3号开关控制的灯。关1号开关灯亮灯热该灯由2号开关控制该灯由1号开关控制该灯由3号开关控制定义特征描述方式1.有穷性2.确切性3.输入项4.输出项5.可行性1、自然语言2、流程图解决问题的方法和步骤算法算法的描述方式(自然语言)0102第一步:打开冰箱第二步:把大象放冰箱第三步:关上冰箱门大象进冰箱第一步:确定要购买的物品第二步:进行挑选、比较第三步:到收银台结账付款到超市购物算法的描述方式(流程图)流程线处理框判断框连接符起止框输入输出框算法的基本结构流程图顺序循环选择分支循环结构分支/选择结构顺序结构0204010305算法必须能在执行有限个步骤之后终止有穷性算法一定要有输出。任何算法都不能“无功而返”输出项一个算法有0个或多个输入,以刻画运算对象的初始情况,所谓0个输入是指算法本身给出了初始条件输入项算法中的每一次运算都有明确的定义,具有无二义性,并且可以通过计算得到唯一的结果确切性算法中执行的任何计算都可以在有限时间内完成(也称为有效性),算法中的运算都必须是可以实现的可行性算法的重要特征寻找“被污染的药丸”有4个分别装了4种药丸的药瓶,里面每颗药丸都有单颗标准质量,其中有一个药瓶中的所有药丸都被污染了。每颗被污染的药丸比正常药丸增重1克。请在只允许称重一次的情况下,判断出哪个药瓶中的药丸被污染了?活动2如果从每个药瓶中取出1颗药丸分别进行称重,肯定可以判断出哪颗药丸被污染了,但是这种做法显然不符合“只能称量一次”的要求。从第一个药瓶中取出1颗药丸,从第二个药瓶中取出2颗药丸,从第三个药瓶中取出3颗药丸,从第四个药瓶中取出4颗药丸,共10颗药丸。如果增重______克,则________号药瓶中的药丸被污染。寻找“被污染的药丸”考虑一颗药丸的重量变化,如果药丸被污染,则增重______克,否则增重________克。从某一个药瓶中取出n颗药丸,如果被污染,则增重________克,否则增重__________克。寻找“误删的ID”学校历届校友的数据存储在学校网络中心服务器中(共10000条,无重复数据),某管理员由于误操作删除了一位校友的ID号(8位整数)。恰好在备份文件中保存了所有人员的ID号(无重复数据,无序)。怎么快速找出被误删的ID号以便恢复数据?活动3ID号的特征132误删的ID号备份文件中ID号总和与故障文件中的ID号总和的差值为两次数据在两个文件中出现的次数整数11111111—99999999数据类型及大小范围:寻找“误删的ID”target = ________ #设置初始值f1 = open(‘copy.txt’, ‘r’) #打开备份文件list1 = f1.readlines() #按行读取备份文件for line in list1 : #依次处理列表list1中的数据target = target + int(line) #将读取的数据做加运算f1.close() #关闭备份文件f2 = open(‘trouble.txt’ , ‘r’) #打开故障文件list2 = f2.readlines() #按行读取故障文件for line in ______: #依次处理列表list2中的数据target = ____________ #将读取的数据做减运算____________ #关闭故障文件print(“被误删的ID号是:” , ______) #输出被误删的ID号0list1target – int(line)f2.close()Target寻找“误删的ID”求解“谁是冠军”这次面试的冠军在A、B、C、D四位同学中。A说:“不是我。”B说:“是C。”C说:“是D。”D说:“C说的不对。”已知四人中有一人说了假话。你能判断出到底谁是冠军吗?说出你的结论和判断过程。活动4求解“谁是冠军”结论:___________是冠军则B和C说的也是假话1、A说的是假话则根据D所说的,推出C说的也是假话2、B说的是假话则C是冠军3、C说的是假话则B说的是假话4、D说的是假话C枚举我们常利用计算机运算速度快、精确度高的特点解决实际问题。在设计算法时,最简单的方法就是“直译”我们的思维过程。有一种算法就是把所有可能的答案一一列举,合适就保留,不合适就丢弃。这种方法称“枚举”或“穷举”。求解“谁是冠军”010203解决问题的一般结构:循环+判断知道什么样的条件满足题意确定枚举范围求解“谁是冠军”代码分析#设置选手列表champion = [‘A’, ‘B’, ‘C’, ‘D’]#循环读取选手编号for i in champion :#查找符合条件的选手cond = (i != ‘A’) + (i == ‘C’)+ (i ==‘D’) + (i != ‘D’)if cond == 3 :print(“冠军是:” , i)感谢观看! 展开更多...... 收起↑ 资源预览