小数奥数与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.