📜  拼图 |符号

📅  最后修改于: 2022-05-13 01:57:25.329000             🧑  作者: Mango

拼图 |符号

有两个门。一个去地狱,另一个去天堂。看门人向 Sahil 提出一个谜题,以决定他应该为他打开哪扇门。显然,如果 Sahil 正确回答了这个谜题,那么天堂之门就会打开,否则地狱之门就会打开。根据问题 Sahil 给出了从 1 到 n 的 n 个连续整数,它们被写成一行。他必须在它们前面加上符号“+”和“-”,这样得到的表达式就等于 0 或者,如果任务不可能完成,那么 Sahil 应该告诉看门人“给定的问题不存在解决方案” .守门人希望 Sahil 使用有效的方法在最短的时间内找到答案,而不是检查所有可能的放置标志的方法。 Sahil 来找你,把你当作他的朋友。你会帮助他找到解决方案吗?

解决方案 :
当且仅当 n 或 n+1 能被 4 整除,这个谜题才有解。

解释 :
该问题等效于将 n 个整数从 1 到 n 划分为具有相同总和的两个不相交的子集。不相交子集是没有公共元素的子集。两个不相交的子集将是:
1) 前面有加号的数字子集,以及
2) 前面有一个减号的数字子集。

由于前 n 个连续整数之和为 S = 1 + 2 + 3 + —————— + n = (n)(n + 1)/2 ,因此每个子集中的数字之和必须相等精确到 S 的一半,即 S/2。这意味着 S 的值,即 (n)(n+1)/2 必须是偶数才能让谜题有解。

方法 :



1) 很明显,n(n + 1)/2 是偶数当且仅当 n 是 4 的倍数或 n + 1 是 4 的倍数。

2) 事实上,如果 n(n + 1)/2 = 2t,这意味着 n(n + 1) = 4t,并且由于 n 或 n + 1 是奇数,另一个必须能被 4 整除。反之,如果n 或 n + 1 是 4 的倍数,因此 n(n + 1)/2 显然是偶数。

3) 现在考虑 n 可被 4 整除的情况。在这种情况下,例如,我们可以将 1 到 n 的整数序列分成 n/4 组,每组四个连续的整数,然后在前面加上“+”号在这 n/4 组中的每组中,第一个和第四个数字以及第二个和第三个数字前的“-”符号。这可以理解为:

(1 – 2 – 3 + 4) + (5 – 6 – 7 + 8) + ———— + ((n – 3) – (n – 2) – (n – 1) + n) = 0. — ————(1)

4) 现在考虑 n + 1 可被 4 整除的情况,然后 n = 4t – 1 ,这意味着 n = 3 + 4(t – 1),我们可以通过首先处理前三个来利用相同的想法编号如下:

(1 + 2 – 3) + (4 – 5 – 6 + 7) + ———— + ((n – 3) – (n – 2) – (n – 1) + n) = 0. ——— –(2)

所以总结一下,问题将有以下解决方案:
计算 n mod 4,即 n 除以 4 的余数。
解决方案1:如果余数等于0,则插入“+”和“-”符号,如公式(1)所示。
解决方案2:如果余数等于3,则插入“+”和“-”符号,如公式(2)所示。
否则,返回消息“给定问题不存在解决方案”。

参考 : 算法谜题 – Anany Levitin, Maria Levitin