前段时间我回答了一个类似的问题,但 m 和 n 是相等的m = n
。(你必须递归思考才能解决这个问题),根据你的评论,我认为可能的答案是:{(1,a)(2,b)(3,c)}, {(2,a)(3,b)(1,c)}, {(3,a)(1,b)(2,c)}, {(3,a)(2,b)(1,c)}, {(2,a)(1,b)(3,c)} and {(1,a)(3,b)(2,c)}
那么这是我的食谱:
用它们的初始值设置 2 个数组,让我们称它们为letters
和numbers
。
*---*---*---* *---*---*---*
| a | b | c | <---letters. | 1 | 2 | 3 | <---numbers.
*---*---*---* *---*---*---*
选择其中一个数组作为您的支点,我选择了letters
,它将是静态的。
*---*---*---* *---*---*---*
| a | b | c | <---STATIC. | 1 | 2 | 3 | <---DYNAMIC.
*---*---*---* *---*---*---*
根据需要逆时针或顺时针旋转动态数组,您必须i element of numbers
使用i element of letters
.
*---*---*---* *---*---*---* *---*---*---*
| 1 | 2 | 3 | -(Print)-> | 2 | 3 | 1 | -(Print)-> | 3 | 1 | 2 |
*---*---*---* *---*---*---* *---*---*---*
所以你在这一点上得到:{(1,a)(2,b)(3,c)}, {(2,a)(3,b)(1,c)}, {(3,a)(1,b)(2,c)}
, 3 丢失了。
i element
与n element
动态数组的交换。
*---*---*---* *---*---*---*
| 1 | 2 | 3 | ---------( Swap (0<->2) )-------> | 3 | 2 | 1 |
*---*---*---* *---*---*---*
重复步骤 3。
*---*---*---* *---*---*---* *---*---*---*
| 3 | 2 | 1 | -(Print)-> | 2 | 1 | 3 | -(Print)-> | 1 | 3 | 2 |
*---*---*---* *---*---*---* *---*---*---*
所以你得到了错过的子集:{(3,a)(2,b)(1,c)}, {(2,a)(1,b)(3,c)} and {(1,a)(3,b)(2,c)}
.
如果您有超过 3 个示例 4. 简单:(1234
旋转 N 次,其中 N 是变量的数量并随着每次移动打印),交换 1 和 4 -> 4231
(旋转和打印),交换 2 和 3 -> 4321
(旋转和打印),交换 4 和 1 --> 1324
(旋转和打印)。
我希望这会有所帮助。