Golden Thumb

1-on-1 tutor of chosen kids
个人资料
正文

看完五年级的 Felix 的心路历程,您再也不会觉得“算法”是什么神秘的东西了

(2021-01-09 13:34:07) 下一个

Felix 接触编程半年左右,一直用的是苹果公司的 Swift 编程语言。新年伊始开始玩第二种编程语言,古老的 c++ 。今天在黑客榜网站 HackerRank 上的挑战是,用 c++ 在四个整数中挑出最大的。

如果您觉得这是个容易的问题的话,我可以告诉您,智商超高的学习编程近三年的七年级小朋友,在半个小时内尚未找到令人满意的方案。他只是用了个土办法搞定这个问题,仍在找寻更加合理的解决办法,即“算法”。

Felix 思考了几分钟后,径直写下了这样的代码:

他一路写着,我一路感动着。

这位在半年前,当时他还在四年级,我给他测智商时,20题全对的爱好广泛的小朋友,果然逻辑性极强。他采用的办法大致可以这样描述:准备好三个空盒子,用于存放两个数比较后的大者。待比较的四个数分别为 a,b,c,d。头两个数 a 和 b 比较后,大的放进第一个盒子里。然后用第一个盒子里的数与 c 比较,把大的装进第二个盒子。最后再用这第二个盒子里的数与最后那个尚未参与比较的 d 进行比较,大的装进第三个盒子,这就是最后要找的 a,b,c,d 中最大的了。

他解决了问题,通过了 HackerRank 的挑战。

这时候我说:“Felix,等一等。你用了三个盒子装比较后的结果(大的数)。咱们真的需要三个盒子吗?是不是一个就够了?”

话音未落,Felix 就明白了,刷刷刷写下了让我无比欣慰的算法。即一个一个比较,不断把大的装进唯一的盒子,最后盒子里留下的必然是最大的数。

顺便说一下前面提到的“土办法”。思路是,
如果 a 大于 b 并且 a 大于 c 并且 a 大于 d 答案则为 a;
如果 b 大于 a 并且 b 大于 c 并且 b 大于 d 答案则为 b;
如果 c 大于 a 并且 c 大于 b 并且 c 大于 d 答案则为 c;
如果 d 大于 a 并且 d 大于 b 并且 d 大于 c 答案则为 d;

这种办法的弱势是,比较的次数多,而且是难扩展的,比如不是 4 个数,而是 40 个 400 个数甚至更多。

[ 打印 ]
阅读 ()评论 (0)
评论
目前还没有任何评论
登录后才可评论.