我有N个整数:1,2,3 ... N
任务是使用+, - ,*,/使表达式为0。
例如-1 * 2 + 3 + 4-5 = 0
我该怎么做?
可能是C / C ++上的一些代码吗?
答案 0 :(得分:1)
如果N%4 == 0,则对于每四个连续的整数a,b,c,d,取a - b - c + d
如果N%4 == 1,使用1 * 2开始,然后像以前一样继续。 (即1 * 2 - 3 - 4 + 5 + 6 - 8 - 8 + 9 ......)
如果N%4 == 2,则从1 - 2 + 3 * 4 - 5 - 6开始,然后按照N%4 == 0示例继续进行。
如果N%4 == 3,则从1 + 2 - 3开始,然后按照N%4 == 0示例继续进行。
所有这些都找到了从前几个整数中得到零的方法,留下四个整数的倍数,然后利用模式a - b - c + d = 0对于任何四个整数连续整数。
答案 1 :(得分:0)
这基本上是SAT,或者你知道这些数字是一个序列(例如2 1 8是被禁止的)。负数怎么样?
如果序列不是太大,我建议简单地启动它。一个贪婪的解决方案是通过查找可以评估为零的子集来减少问题。