穷举算法解题的一般思路

2016-02-19 14:04 16 1 收藏

下面是个超简单的穷举算法解题的一般思路教程,图老师小编精心挑选推荐,大家行行好,多给几个赞吧,小编吐血跪求~

【 tulaoshi.com - 编程语言 】

穷举算法是程序设计中使用得最为普遍、大家必须熟练把握和正确运用的一种算法。它利用计算机运算速度快、精确度高的特点,对要解决问题的所有可能情况,一个不漏地进行检查,从中找出符合要求的答案。 用穷举算法解决问题,通常可以从两个方面进行分析: 一、问题所涉及的情况:问题所涉及的情况有哪些,情况的种数可不可以确定。把它描述出来。 二、答案需要满足的条件:分析出来的这些情况,需要满足什么条件,才成为问题的答案。把这些条件描述出来。 只要把这两个方面分析好了,问题自然会迎刃而解。 例 1 : 36 块砖, 36 人搬。男搬 4 ,女搬 3 ,两个小儿抬一砖。要求一次全搬完。问需男、女、小儿各若干? 分析 :题目要我们找出符合条件的男生、女生和小孩的人数。答案显然是一组数据。首先分析一下问题所涉及的情况。对于男生来说,至少要有一人;每个男生可以搬 4 块砖,那么 36 块砖最多 9 个男生足够,共有 9 种不同取值。同样,女生有 12 种不同取值。两个小孩抬一块砖,至少要有两个小孩,最多 36 个,并且小孩的人数必须是个偶数,所以小孩的人数可以取 18 种不同的值。最坏情况下,男生、女生和小孩的人数可以是 9 × 12 × 18 = 1944 种不同组合。 知道了问题所涉及的情况有 1944 种,是个确定的数。接下来就要把它描述出来。描述的时候用什么计算机程序设计语言都可以,我这里就以 QBASIC 语言为例:假设男生人数为 x ,女生人数为 y ,小孩人数为 z 。可以构建这样一个三重循环 for x=1 to 9 for y=1 to 12 for z=2 to 36 step 2 循环体 next z next y next x 理论上这个循环的循环体将执行 1944 次,我们可以用它来对问题所涉及的 1944 种不同情况逐个进行检查。 分析完问题所涉及的情况后,第二步就要看看答案需要满足什么条件。仔细阅读一下题目,我们就会发现,答案 x 、 y 、 z 的值必须要同时满足两个条件:①总的工作量是 36 块砖,即: 4x+3y+z/2=36 ;②需要的总人数是 36 人,即: x+y+z=36 。把它描述出来就是: 4x+3y+z/2=36 and x+y+z=36 。满足这个条件的 x 、 y 、 z 的值就是问题的答案。我们可以在循环体里面对这个条件进行判定,看它是否满足,若满足,就把答案输出来。源程序如下: for x=1 to 9 for y=1 to 12 for z=2 to 36 step 2 if 4*x+3*y+z/2=36 and x+y+z=36 then print x,y,z next z next y next x end 例 2 : A 、 B 、 C 、 D 、 E 五人夜间合伙捕鱼,凌晨时都倦怠不堪,各安闲河边的树丛中找地方睡着了。日上三竿, A 第一个醒来,他将鱼分作五份,把多余的一条扔回河中,拿自己的一份回家去了。 B 第二个醒来,也将鱼分作五份,扔掉多余的一条,拿走自己的一份,接着 C 、 D 、 E 依次醒来,也都按同样的办法分鱼,问五人至少合伙捕了多少条鱼?试编程序算出。 分析: 假设五人合伙捕了 x 条鱼,则“ A 第一个醒来,他将鱼分作五份,把多余的一条扔回河中,拿自己的一份回家”以后,河边应该还剩 4(x-1)/5 条鱼。在这里,题目为我们提供了一个隐含条件: (x-1)/5 必须是个正整数,否则,就不符合实际情况 , 即: (x-1) mod 5 = 0 必须成立。同样, B 、 C 、 D 、 E 在分鱼的时候也都必须要满足它。我们不妨取 x 的最小值为 6 ,让 x 逐渐增加,直到找到一个符合问题要求的答案;根据 (x-1) mod 5 = 0 这个条件, x 的每一次取值,都增加 5 个单位。可以构建一个不定次数的循环 do until 找到答案 判定 x 是否为答案 loop 通过这个循环,我们就可以对每一个 x 的可能情况进行检查。源程序如下: rem 初始化 cls x=6 zd=0 i=0 do until zd=1 rem 判定 (x-1) mod 5 = 0 这个条件是否在五次分鱼中都满足,若都满足,则置找到答案标志 (zd) 为 1 ;否则,取下一个 x 的值,并置统计变量 i 为 0 if i=5 then zd=1 else x = x+5 i=0 endif rem 初始化标志 wtg (用来标识条件是否被测试通过) wtg=0 k=x rem 在每一次分鱼中对条件进行判定,并置相应的标志 do until wtg=1 or i=5 if (k-1) mod 5=0 then k=4*(k-1)/5 i=i+1 else wtg=1 endif loop loop rem 输出答案 print x end

来源:https://www.tulaoshi.com/n/20160219/1606086.html

延伸阅读
标签: 生活常识
床垫一般多厚?   床垫厚度,床垫一般多厚? 你能够把一张吱吱嘎嘎响的床与良好的睡眠联系在一起吗?人们每天都在努力提高自己的生活质量,关爱自己的身体,却往往忽略了睡眠质量。腰酸背痛是现代人的常见病,除了办公习惯、坐姿不正确外,最重要的原因与睡眠没能充分达到放松及休息的作用有关,而这又大多和床的质量与摆放有很...
标签: 生活常识
月经初潮一般几天 月经初潮一般几天 时间一:一般的月经时间是3-7天比较正常的,也可能因为是初潮,时间也可能不是很规律的。 时间二:月经初潮一般是一周左右结束,不过由于是刚刚来,月经可能还不规律,会在十天左右干净。这个也不用很担心的。 时间三:青春期月经一般是5-7天左右,这个是很正常,大家不用很担心的,毕竟是第一...
标签: 卧室 壁纸
1、儿童卧室壁纸 浅色小卡通的壁纸适合儿童或者是一些乖巧的女孩子的卧室,这些漂亮而又甜美的风格,可以带给人一种就像在炎热的夏天吃了冰激淋一样的感觉,而有时还会让你感到回到童年的感觉。 2、立体创意壁纸 有时房间太大了也不是件好事,总显得很空旷。如果你感觉你的卧室有些单调,那你不妨选择立体创意图案的壁纸...
标签: 生活常识
军训一般都有哪些内容 图老师生活常识配图   很多参加过军训的同学都觉得军训又累又苦,其实军训都包括哪些内容呢? 基本训练: (1)队列练习是军训重头戏,它包括:立正、稍息、停止间转法、行进、齐步走、正步、跑步、踏步、立定、蹲下、起立、整理着装、整齐报数、敬礼、礼毕、跨立、半夜拉练等等。在军训过程中,像...
标签: 生活常识
狂犬疫苗一般打几针,怎么打 狂犬疫苗一般打几针,怎么打 第一,人被疯犬猫或可疑的疯动物咬伤后,注射狂犬疫苗是十分重要的,注射时间越早越好,应该进行全程免疫。 第二,一般被狗咬伤(皮肤没有出血,只有轻微擦伤或抓伤,或破损皮肤被动物舔过)就要共注射5次的,应在当天就是0、3、7、4、30天各注射狂犬病疫苗支,儿童用量和成人...

经验教程

894

收藏

37
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部