龙空技术网

程序猿老爸的Scratch算法课(五)——算24(穷举法)

随风路 148

前言:

眼前大家对“24点算法思想”大致比较关切,姐妹们都需要了解一些“24点算法思想”的相关文章。那么小编在网摘上搜集了一些对于“24点算法思想””的相关文章,希望你们能喜欢,各位老铁们快快来了解一下吧!

“粑粑,跟我玩一下算24吧!刚赢了外公,一点挑战都没有……”

嘿,小样!才学会乘除法了不起了?

“走开走开,粑粑没时间!”

“哼!我们一人十张牌,看你赢不赢得了我!”

嘿,还用激将法!来就来,谁怕谁!想要赢我,至少得等你六……五,啊,不,四年级才行!

Ten minutes later……

“啊!不会吧!你居然赢不了小骞?”老婆轻蔑地看着正抱头叹气的我说,“你研究生不会是假的吧?”

“呃……状态不好……最近老加班……”

“哈哈……粑粑……那下次我只拿四张牌?”

……

不就是算24吗?你赢得了计算机吗?老爸跟你玩算法!

穷举法

穷举法的基本思想是根据题目的部分条件确定答案的大致范围,并在此范围内对所有可能的情况逐一验证,直到全部情况验证完毕。若某个情况验证符合题目的全部条件,则为本问题的一个解;若全部情况验证后都不符合题目的全部条件,则本题无解。穷举法也称为枚举法。

用穷举法解题时,就是按照某种方式列举问题答案的过程。针对问题的数据类型而言,常用的列举方法一有如下三种:

(1)顺序列举:是指答案范围内的各种情况很容易与自然数对应甚至就是自然数,可以按自然数的变化顺序去列举。(如上一讲的线性查找算法)

(2)排列列举:有时答案的数据形式是一组数的排列,列举出所有答案所在范围内的排列,为排列列举。(如第一讲中列举的排列组合排序算法)

(3)组合列举:当答案的数据形式为一些元素的组合时,往往需要用组合列举。组合是无序的。

算24的穷举法

算24是随机取1~13间的4个数字,通过+、-、×、÷四则运算计算出24为赢。这显然可以采用组合列举法,穷举所有4个数字及四则运算的排列组合。

记4张牌为a、b、c、d,计算符号用*表示(可为+、-、×、÷),则根据计算顺序,可以表示为如下五种情况:

((a*b)*c)*d

(a*(b*c))*d

a*(b*(c*d))

a*((b*c)*d)

(a*b)*(c*d)

每种情况中有三个符号计算,对+、-、×、÷运算遍历三次,可以得到运算结果。考虑到小数减大数为负的情况,最后取绝对值为24就是正确的计算过程。

上代码!

算24的Scratch实现

“计算”积木

根据符号来计算A和B的值,并写入到“得数”变量。

“算法”积木

对应上述情况1((a*b)*c)*d的实现∶

如果得数绝对值为24,则加入到计算结果列表。

后面的实现类似:

计算(a*(b*c))*d

计算a*(b*(c*d))

计算a*((b*c)*d)

计算(a*b)*(c*d)

上面几步都可以直接用得数变量作为中间运算结果,但这一步,需要将中间计算结果保存起来,再做计算。

初始化数据

开始计算吧

计算完成后通知小猫说结果。

试一下效果∶

再来一个∶

嘿,真不赖!你算出了吗?

小结

穷举法在算法设计中被大量应用,常用于解决“是否存在”或“有多少种可能”等问题。其中许多实际应用问题靠人工推算求解是不可想象的,而应用计算机来求解,充分发挥计算机运算速度快、擅长重复操作的特点,穷举判断,快速简便。

“来来来,小骞!和计算机玩一局算24?你要是能赢,我把牌吃了!!”

“哼!用计算机算什么本事!”

嘿,还反了天了!你老爸就靠这个吃饭的!不然你哪来的东西吃,哪来的新衣服穿!

“去!跟计算机玩十把!赢不了就没饭吃……”

“小气鬼粑粑……”

标签: #24点算法思想