📜  拼图 |倒挂眼镜

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

拼图 |倒挂眼镜

桌子上有n个玻璃杯,都倒立着。只需一步,您就可以翻转其中的 n – 1 个。确定所有的眼镜可以在最少的移动次数内翻起的所有 n 值。

6 眼镜

存在两种情况,即n的值为奇数时和n的值为偶数时。如果 n 的值为奇数,则无解。如果 n 的值为偶数,则问题可以在 n 步内解决,这是所需的最少步数。

如果 n 是奇数:就像在一个动作中一样,我们可以恰好翻转其中的 n – 1 个。如果 n 是奇数,则 n – 1,即在一个动作中翻转的眼镜数量是偶数。因此,倒置的眼镜数量的奇偶性将始终保持奇数,就像在初始位置一样。因此,最终无法达到倒杯数为0的最终位置,即偶数。

如果 n 是偶数:让我们假设玻璃的编号是从 1 到 n。如果 n 是偶数,则可以通过以下移动 n 次来解决问题:翻转除第 i 个玻璃外的所有玻璃,其中 i = 1 , 2, . . . , 名词。
这是算法在 n = 6 时的应用示例。让我们将倒置的眼镜表示为 1,其他表示为 0。下一步未翻转的玻璃杯以粗体显示。



如果 i 的值为 1,则翻转除第 1 个玻璃杯以外的所有玻璃杯。
1 11111 –> 100000
同样,如果 i 的值为 2,则翻转除第二个玻璃以外的所有玻璃。
1 0 0000 –> 001111
同理,如果 i 的值为 3,则翻转除第 3 个玻璃以外的所有玻璃。
00 1 111 –> 111000 等等。
因此,对于 n = 6,这将如下所示:

1 11111 –> 1 0 0000 –> 00 1 111 –> 111 0 00 –> 0000 1 1 –> 11111 0 –> 000000

由于任何连续两次移动都不会对眼镜的状态产生影响,或者恰好改变其中两个的状态,因此没有算法可以在少于 n 次移动的情况下解决问题。

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