- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
4.4.5 拓展训练 【第五步】为体现“A、B、C、D、E、F是来自六个不同国家的人,即六个人的国籍各自互不相同”这一隐性约束条件,构造另一逻辑表达式: condition_2=((a!=b)and(a!=c)and(a!=d)and(a!=e)and(a!=f)and(b!=c)and(b!=d)and(b!=e)and(b!=f)and(c!=d)and(c!=e)and(c!=f)and(d!=e)and(d!=f)and(e!=f))。 4.4.5 拓展训练 【第六步】以六个推理变量a、b、c、d、e、f为穷举变量,构造多重循环,使每个变量分别取尽六个国家的编号;在循环体内测试逻辑命题condition_1和condition_2,找出使这两个命题都能同时成立的解变量组 (a,b,c,d,e,f)。 4.4.5 拓展训练 【第七步】由解变量组(a,b,c,d,e,f)的值作为下标,映射到Nation[]数组的元素内容,得到A、B、C、D、E和F六个人各自所属的国籍名称,输出问题的最终答案。 4.4.5 拓展训练 ●本题的算法模型描述如下: ◆a取值1、2…6 ◆b取值1、2…6 ◆c取值1、2…6 ◆d取值1、2…6 ◆e取值1、2…6 ◆f取值1、2…6 begin ★如果当前的(a,b,c,d,e,f)能够使condition_1和condition_2同时成立,则该(a,b,c,d,e,f)即为问题的解变量组; ★将解变量组映射到数组Nation; ★组织并输出符合题意的答案。 end. 4.4.5 拓展训练 程序结果: 4.4.5 拓展训练 4.4.5 拓展训练 4.4.5 拓展训练 ●[练习题1]谁是窃贼:公安人员审问四名窃贼嫌疑犯。已知,这四人当中仅有一名是窃贼,还知道这四人中每人要么是诚实的,要么总是说谎的。在回答公安人员的问题中: 甲说:“乙没有偷,是丁偷的。” 乙说:“我没有偷,是丙便的。” 丙说:“甲没有偷,是乙偷的。” 丁说:“我没有偷。” 编程判断谁是盗窃者。 ●[练习题2]甲乙两个网球队进行比赛,甲队有队员A、B、C三人,乙队有队员M、N、T三人。现抽签决定两队对打名单。记者向队员打听比赛的名单,得到以下答复: A说:我不和M对打; C说:我不和M、T对打。 编程推算两队对打的名单。 任务 4.6 找出伪币 给你一个装有n枚硬币的袋子。n枚硬币中有一个是伪造的,并且那个伪造的硬币比真的硬币要轻一些。你的任务是找出这枚伪造的硬币。 为了帮助你完成这一任务,将提供一台可用来比较两组硬币重量的仪器,比如天平。利用这台仪器,可以知道两组硬币的重量是否相同。 对n=2,3,4,5,6,7,8,9? N=80 ? 4.6.1 案例描述 有一个老板有一袋金块。每个月将有两名雇员会因其优异的表现分别被奖励一个金块。按规矩,排名第一的雇员将得到袋中最重的金块,排名第二的雇员将得到袋中最轻的金块。根据这种方式,除非有新的金块加入袋中,否则第一名雇员所得到的金块总是比第二名雇员所得到的金块重。如果有新的金块周期性的加入袋中,则每个月都必须找出最轻和最重的金块。假设有一台比较重量的仪器,我们希望用最少的比较次数找出最轻和最重的金块。 引例2:金块问题 【分治思想】:分治就是“分而治之”的意思,其实质就是将原问题分成n个规模较小而结构与原问题相似的子问题;然后递归地解这些子问题,最后合并其结果就得到原问题的解。当n=2时的分治法又称二分法。 分治步骤: 1.分解(Divide):将原问题分成一系列子问题。 2.解决(Conquer):递归地解各子问题。若子问题足够小,则可直接求解。 3.合并(combine);将子问题的结果合并成原问题的解。 分治思想 问题S 问题S 问题S S的解 问题S1 …… 问题S2 问题Si 问题Sn …… S1的解 …… S2的解 Si的解 Sn的解 …… 问题的分解 子集解的合并 子问题求解 分治思想 if(问题不可分) { 直接求解; 返回问题的解; } else { 对原问题进行分治; 递归对每一个分治的部分求解; 归并整个问题,得出全问题的解; } 分治策略的解题思路 应用举例1求最大值和最小值 例:求2^n(2=n=10^9)个元素中的最大元与最小元。 【分析】假设数据个数为n,存放在数组a[1..n]中。可以直接进行比较: minn=a[1];maxx=a[1]; for(i=2;i=n;i++) if(
原创力文档


文档评论(0)