人教版小学数学二年级(上)的第35页有道思考题:把1~9这9个数按从小到大的顺序排列,中间添上一些“+”“-”,可以使计算的结果等于100。比如:12+3-4+5+67+8+9=100。现在把9~1这9个数按从大到小的顺序排列,你能添上一些“+”“-”,使计算的结果也等于100吗?
这道题对小孩而言不算容易,我带着他一起找出了一种解:98-76+54+3+21=100。但有没其他解呢?一共又有多少种解呢?为了激发小孩的学习兴趣,鼓励其探索规律,我就想尝试用Python求解。因为现在只学到了100以内的加减法,我就先求出了这种情况下的解,见下图。由于二年级还没学负数,所以推荐绿色部分的答案。
这样孩子看到程序快速运行,算出结果,会觉得程序很神奇,然后就可以引导他学好语文、数学、英语、编程的重要性。
首先,学好语文,才能认识字,读懂题目的意思,有好的沟通。
其次,学好数学,才能知道背后的逻辑思维,设计算法。
然后,学好英语,才能告诉计算机你想做什么,编程语言就是计算机“能听懂的话”,而大多数语言都是英文的,就像他已经认识的for、in、green这些。
最后,学好编程,才可以帮助解决很多难题。数学代表逻辑思维,物理代表实证思维,而编程有助培养计算思维。再调用turtle库画一些简单的五角星什么的,会让孩子觉得编程很好玩,就像游戏一样。
ls=(1,-1,10,-10)
ls_2=(1,-1)
#考虑到小学二年级上学期的学生目前只学习到100以内的加减,所以不考虑3个数或3个数以上连起来的情况。
#1表示加号,-1表示减号,10表示和后面的数字连起来作为两位数来加(这时后面的数只能取1)。
#-10表示和后面的数字连起来作为两位数来减(这时后面的数只能取-1)。for a in ls: for b in ls:for c in ls:for d in ls:for e in ls:for f in ls:for g in ls:for h in ls:for i in ls_2:ans=[a,b,c,d,e,f,g,h,i] #这些其实是9,8,7,6,5,4,3,2,1前的系数for x in range(0,9):if ans[x]==10:ans[x+1]=1elif ans[x]==-10:ans[x+1]=-1if ans[0]*9+ans[1]*8+ans[2]*7+ans[3]*6+ans[4]*5+ans[5]*4+ans[6]*3+ans[7]*2+ans[8]*1==100:print(ans)
补充说明:上面程序的输出解有些是重复的,在Excel里筛选出18种不重复的解。如果有大神知道如何在程序中去重,欢迎赐教。