滑铁卢大学每年春季都举办孩子的数学竞赛。我在辅导孩子准备2021五月的比赛时,发现最后的几道难题,有很多都用到了编程思想,比如2019 Gauss Contest Grade 7 Last Question,是典型的循环找边界的问题。
- An 8 × 8 × n rectangular prism is made up from 1 × 1 × 1 cubes. Suppose that A is the surface area of the prism and B is the combined surface area of the 1×1×1 cubes that make up the prism. What is the sum of the values of n for which B/A is an integer?
(A) 86 (B) 90 (C) 70 (D) 78 (E) 96 正确答案是(B) 90
孩子们应该没有问题写出A/B的表达式。A = 8×8×2 + 8×n×4; B = 8×8×n×6;
所以:A/B = 12n/(4+n) , 问题是n是什么正整数,A/B可以是整数?我们可以将A/B写作整数m, 于是等式可写做:m = 12n/(4+n)。 n是正整数,经分析,m也应是正整数。
初步的想法是:n可以从2到94的偶数进行循环。上界94是据答案(E),偶数是分析所得。用Python写一个三行的小程序非常容易:
for n in range(2,95,2):
if (12*n/(4+n)).is_integer():
print(n)
在屏幕上得到了n的答案是:2, 4,8,12,20,44
但是上面的循环对参加竞赛的学生是要用纸笔及计算器进行的。要做循环22次才能找出n=44,据可选择的答案,在n=44后不用再继续循环了。
纸笔进行循环22次够累孩子的了,还能不能循环次数更少一些呢?我们可以将等式m = 12n/(4+n)进行变形, 得到:n = 4m/(12-m), 其中m,n均是正整数。
经分析,因n是正整数,m只可以是1至11的整数,用Python写一个三行的小程序也非常容易:
for m in range(1,12):
if (4*m/(12-m)).is_integer():
print(m)
于是得到A/B或是说m只可以是: 4,6,8,9,10,11
将m是4,6,8,9,10,11带入等式n = 4m/(12-m), 同样可得到n的值是:2, 4,8,12,20,44
第二种的循环只循环11次,学生用纸笔循环也可以做了。滑铁卢大学给出的答案正是这样:
![](https://code4kids.ca/wp-content/uploads/2021/03/2019.Gause_.25.answer.jpg)
所以我们看到,如果曾学过简单的Python编程,可以写小程序很快解出答案。即使是竞赛,必须用纸笔及计算器做,如果具有编程的循环找边界的思想,也是能够解答这最后一道难题的。
青少年编程Python基础班从春假开始招生,主要针对零基础或有初步编程经验的孩子,进行Python面向过程编程的初级知识的学习。本课程将以Python Turtle可视化图形方式辅助孩子学习循环概念,激发学习兴趣,并用Python进行有趣的数学问题的编程,提高数学能力。初步讲解Python游戏编程,引导孩子读懂简单游戏代码。青少年学习编程是培养逻辑能力和数理思维的绝佳方式。详情请见:https://code4kids.ca/p/python1-for-kids/ ,加微信ID:AndrewBoone,或联系604-828-0288@编程姚老师。
2019 Gauss Contest Grade 7 Questions
2019Gauss7Contest2019 Gauss Contests (Grades 7 and 8) Solution
2019GaussSolution
OMG so helpful