问一个小学火柴等式问题的程序
prolog吧
全部回复
仅看楼主
level 13
丁兔 楼主
像图里的用火柴摆出来的等式,问最少要移动几根火柴,才能使等式成立?这个问题能用Prolog解决吗?再发散一下,对任意一个火柴等式,用程序判断能否通过移动N根火柴,使新等式成立,并输出新等式。
2023年01月08日 03点01分 1
吧务
level 14
感觉这个写起来会费不少时间……即使只是四则运算的等式,也要判定很多东西。
只是一个字符变为另外一个字符还相对好判断,但还要考虑运算符号在移去后数字会连在一起的情况;移动火柴后,可以使数字前面多出正号、负号等运算符号的情况;还有目标等式很模糊的情况下,要考虑最短路径的问题……
最后一个问题有意思。上面的这道题,总共有18支火柴,可以写成+8=8或-8=-8的等式,肯定可以通过移动火柴配平等式。因为四则运算中,有除法,0除以除0了以外任何数得零,感觉相对容易达成,意义不大,就先只考虑加减运算吧。至少要6根火柴才能形成等式,即1=1。7根应该不行;8根可以写成+1=1,或-1=-1;9根应该不行;10根可以写成+1=+1;11根可以写成2-1=1……后面的推论就有意思了。不确定更大的火柴数能不能再配成等式。
虽然是小学题,但要考虑的事情不少。可能生活中的问题大多如此。像打扫卫生、洗衣服吧,哪怕小学文化的保姆也能胜任,但现在应该没有这么多功能的机器人。
2023年01月08日 07点01分 2
level 13
丁兔 楼主
我只能做到不改变运算符,只在数字间移动火柴,而且数的个数和位数都不变的情况下,编程输入等式和移动火柴次数,得出新的成立的等式或者无解。这是我目前的极限了。就像你说的,有些人脑很容易解决的问题,计算机解决起来就麻烦的多了。比如我几年前发在吧里的排班表问题,我现在还没解决。如果用Excel手动排班,几个小时就排好了。
2023年01月08日 15点01分 3
1