Python by Example 中文版:IMO与Python例1

小数奥数与Python程序设计相结合,给出一个课程参考。 题目:1*2+2*3+3*4+4*5+……+98*99+99*100=?

教学目标: 让小朋友们直观感受计算机高速的计算能力,同时强化对while循环的掌握(已经学过while基础循环)。

步骤1:让小朋友们笔算1*2+2*3+3*4+4*5=?,耗时大约多少秒?

步骤2:让小朋友们预估如果是笔算1*2+2*3+3*4+4*5+……+98*99+99*100=?,耗时大约多少秒?(给出一个区间就可以)

步骤3:以Python编程实现这个算法

sum = 0
number = 1
while number < (   ):
    temp = (      )
    sum = sum + temp
    number = (      )
print("1*2+2*3+3*4+4*5+ +98*99+99*100=")
print(sum)

步骤4:如何求1*2+2*3+3*4+4*5+……+(n-1)*n=?,让小朋友思考问题边界的变化,会导致哪些程序边界的变化?

sum = 0
number = 1
print("1*2+2*3+3*4+4*5+......+(n-1)*n=?")
n = raw_input("Now enter a number: ")
n = int(n)
while (    ):
    temp = number * (number + 1)
    sum = sum + temp
    number = number + 1
print(sum)

步骤5:练习求1*3+3*5+5*7+…+97*99=?

sum = 0
number = 1
while number < (    ):
    temp = (    )
    sum = (    )
    number = (    )
print("1*3+3*5+5*7+...+97*99=")
print(sum)

换种方法

步骤1:让小朋友们计算1*2+2*3+3*4+4*5+……+98*99+99*100,在这个式子中共进行了多少次的加法与乘法? 98次加法,99次乘法

步骤2:回到问题本身,如果不用计算机,如何更巧的解题呢(是否可以减少运行加法与乘法的次数)

  1*2+2*3+3*4+4*5+……+98*99+99*100
= 1*(1+1)+2*(2+1)+3*(3+1)+……+98*(98+1)+99*(99+1)
= (1^2+2^2+3^2+…+99^2)+(1+2+3+…+99)
技巧提示,这个技巧是要讲给小朋友们的
1^2+2^2+3^2+…+n^2=(n*(n+1)*(2n+1))/6
1+2+3+…+n=(1+n)*n/2

共做了6次乘法,4次加法

= (99*(99+1)*(2*99+1))/6+(1+99)*99/2
= 333300

步骤3:用python编程语言实现

print("1*2+2*3+3*4+4*5+......+(n-1)*n=?")
n = raw_input("Now enter a number: ")
n = int(n)

让小朋友思考,为什么要减1?

n = n -1
sum = (n*(n+1)*(2*n+1)) /6 + (1+n)*n /2
print(sum)

步骤4:练习1*3+3*5+5*7+……+97*99=?

总结: 计算机只是一个工具,如何让工具用的好,才是关键。 这两个方法的优缺点是什么?计算机可以做什么,不能做什么?

下一个例子: IMO与Python例2.