同样,这是一个耽搁了数月之久的事情,关于火柴棒数字游戏,在奥数题中经常能刷到,还是蛮考验思维的。 孩子很喜欢这种题目,我也觉得有意思,所以就花了一些时间琢磨了下。
比如 拿走一根火柴棒,使得下面的等式成立
或者是我在去年发的一道题目,一道移动火柴的题目,要不要试一下
这种题目难就难在,可以同时有多种解法
带着好奇心,我做了下分析,怎么能够写程序生成这样的题目,我没有着急开始写代码,而是做了一些分析。
比如数字所对应的火柴棒数量差异还是很大的。
按照火柴棒数量,基本上能够锁定几类常见的题目:
1)挪动一根火柴棒(平移)
2)添加一根火柴棒(添加)
3)减少一根火柴棒(减少)
接下来就是有点烧脑的重点了, 我整理了下。
平移有五种情况,大体能够覆盖常见的场景:
1)第一种是当前的数字在火柴棒不变的情况下自我调整,火柴棒总数不变
2<->3, 5<->3, 0<->6, 0<->9,6<->9
比如2<->3,意思是2可以平移转换成3,3也可以平移转换成2,类似于这样,其他的描述方式是相似的,就不一一贴图了。
2)第二种情况是一个数字增加一根火柴棒,同时另外一个数字减少一根火柴棒,火柴棒总数不变
1->7,3->9,5->6,5->9,0->8,6->8,9->8,0->10
3)第三种情况是一个数字减少一根火柴棒,同时另外一个数字增加一根火柴棒,火柴棒总数不变
7->1,9->3,8->0,8->6,8->9,10->0
4)第四种情况是将 - 调整为 +,另外一个数字减少一根火柴,火柴棒总数不变
7->1,9->3,8->0,8->6,8->9
5)第五种情况是将+ 调整为 -,另外一个数字增加一根火柴,火柴棒总数不变
1->7,3->9,5->6,5->9,0->8,6->8,9->8
添加一根火柴
1)第一种情况是一个数字增加一根火柴棒,同时另外一个数字减少一根火柴棒,火柴棒总数不变
1->7,3->9,5->6,5->9,0->8,6->8,9->8
2)第二种是将 - 调整为 +,使得等式成立
减少一根火柴
1)第一种情况是一个数字减少一根火柴棒,同时另外一个数字增加一根火柴棒,火柴棒总数不变
7->1,9->3,8->0,8->6,8->9
2)第二种情况是将 + 调整为 -,使得等式成立
整体思路
1)先输出正常的结果
2)在正常的结果基础上调整,输出修改过的结果
例如移动一根火柴的场景,先根据等式的数字来判断五种场景中,根据数字哪种更合适,如果都不合适,则调整符号
以一个看起来极度简单的算式为例
0+9=9
很快就能衍生出十多个个算式:
比如平移一根火柴就有这么多:
9+9=9, 6+9=9, 0+0=9, 0+6=9, 0+9=6, 0+9=0
8+3=9,10+3=9,0+3=8,0+5=8,0+8=5
0-8=9,0-9=8,10-9=9
后续完善代码之后可以把代码附上,先缓缓。