编写一个函数,该函数采用一组整数并打印该组的每个排列,并在每个步骤之间执行交换
输入值
一组整数,例如(0,1,2)
输出量
格式(set)(交换)(set)的排列和交换列表...
测试用例
Input:
(3, 1, 5)
Output:
(3, 1, 5)
(3, 1)
(1, 3, 5)
(3, 5)
(1, 5, 3)
(1, 3)
(3, 5, 1)
(3, 5)
(5, 3, 1)
(3, 1)
(5, 1, 3)
规则
- 您可以根据需要格式化数字集。
- 您可以按任何顺序进行交换
- 您可以重复排列和交换以获得新的排列
- 您的代码不必实际执行交换,输出仅需要显示在最后一个输出和当前输出之间进行了哪些交换
- 您的代码仅需要对包含2个或更多元素的集合起作用
- 您获得的集合将没有重复的元素(例如(0,1,1,2)无效)
这是代码高尔夫球,所以最短的代码胜出!
我们可以使用随机性吗?
—
Zgarb
您的意思是只是进行大量随机交换,直到碰巧实现所有排列?是的,但是您必须确保已打印所有排列
—
Billyoyo,2016年
欢迎来到PPCG!不错的第一个挑战。我建议编辑该示例,以使元素不要与索引混淆,例如use set
—
AdmBorkBork
(3, 1, 4)
左右-第一次读它时我很困惑,因为第一次交换0,1
交换了元素0,1
但也交换了索引0,1
,但是接下来交换了交换没有遵循这种模式。我还将指向您指向“ 沙箱”,您可以在其中发布挑战并获得反馈,然后再将其发布到主站点。
@TimmyD感谢您的建议,我更改了示例。发布此消息后,我立即看到了沙箱的链接,从现在开始,我将首先在其中发布!
—
Billyoyo
所述豪斯-约翰逊-Trotter的算法产生最小必要序列。
—
尼尔