仅仅二年级的小宝马吕斯,却能轻松对付滑铁卢大学的Beaver计算机竞赛五六年级组的所有问题。学习能力之强,从他善于抽象总结可略见一斑。
计算机世界只有三样东西:顺序执行,分支判断,循环。这节课,小宝马吕斯活学活用循环变量,并在课后发表“四妙招”。
金拇指:
今天小宝同学脑洞大开,在书写循环变量表达式的时候反应神速,一气呵成。显示了强大的数学功底。
课结束时,小宝大声说:“其实另一半棋子用大写表示也是有妙招的,下节课我来教你“。这是今晚我第四次对他服气。
马吕斯:
分享几个小妙招:
1,列排公式:小数 + i * 大数与小数的差
2,有几行,写“for loop”时就是0...几
3,黑色与红色列排数不变
4,红色横排是0200003,黑色就是9799996。
这些都是帮你增加效率的。
金拇指:
妙招实在太妙了。感谢分享。
马爹:
这是什么意思啊?谁能解释下?
金拇指:
我不妨称之为出自最年轻的数学爱好者之手的数学论文。
背景介绍:利用循环往中国象棋初始棋盘上摆棋子。棋盘有九列(0,1,2,3,4,5,6,7,8),十行(0,1,2,3,4,5,6,7,8,9)。
马吕斯妙招(1):说的是比如两颗马所处的列 1 和 7,对于从 0 循环到 1 的循环变量 i 来说,可以表达成 1 + i * 6,其中 6 是 7 和 1 之差。再比如两颗象所处的列 2 和 6,对于从 0 循环到 1 的循环变量 i 来说,可以表达成 2 + i * 4,其中 4 是 6 和 2 之差。
马吕斯妙招(2):说的是在用 for 循环改进之前,重复的代码行有 n 个,循环变量 i 的范围就可以写成 0..
马吕斯妙招(3):说的是黑棋和对应的红棋所处的列一样,不必重复计算。
马吕斯妙招(4):说的是在上方的红色棋子的行的序号分别为五个 0 (将用一个,车马象士每对各用一个),一个 2(一对炮),一个 3(五颗卒子);在下方的黑色棋子的行的序号分别为五个 9 (帅用一个,车马相仕每对各用一个),一个 7(一对炮),一个 6(五颗兵)。很显然作者注意到了9 - 2 = 7,9 - 3 = 6 这样的内在联系。