1~n的排列

输入:3

输出:123 132 213 231 312 321


解:

public class Main {

	public static void fun(int n, int[] a, int cur) {
		if (cur == n) {
			for (int i = 0; i < n; i++)
				System.out.print(a[i]);
			System.out.println();
		} else {
			for (int i = 1; i <= n; i++) {
				boolean ok = true;
				for (int j = 0; j < cur; j++) {
					if (a[j] == i)
						ok = false;
				}
				if (ok) {
					a[cur] = i;
					fun(n, a, cur + 1);
				}
			}
		}
	}

	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
		int n = in.nextInt();
		int[] a = new int[n];
		fun(n, a, 0);
	}
}

要实现这个功能,我们可以使用递归生成排列的方法,比如著名的“杨辉三角”(Pascal's Triangle)中的组合公式,用于计算排列数(Permutations)。对于输入的一个排列,例如 "1 3 2",我们需要生成所有可能的排列。 这里有一个简单的 Python 代码示例来实现这个需求: ```python def generate_permutations(nums, prefix=None): # 如果没有前缀,则从 nums 中选择第一个元素作为起始 if prefix is None: prefix = [nums.pop(0)] # 当 nums 变为空时,我们已经得到了一个完整的排列,添加到结果列表中 if not nums: print(prefix) return # 对于每个剩余的数字,将其添加到当前前缀的前面,形成新的排列 for i in range(len(nums)): new_prefix = prefix + [nums[i]] generate_permutations(nums[:i] + nums[i+1:], new_prefix) # 输入的排列数量 n = int(input("请输入数字的个数:")) # 获取输入的第一行排列并存储 first_row = list(map(int, input("请输入第一个排列1~n,用空格分隔):").split())) # 计算排列总数 count = math.factorial(n) print(f"排列总数: {count}") # 生成并输出所有的排列 generate_permutations(first_row) ``` 在这个代码中,`generate_permutations` 函数递归地处理数组,每次从剩余元素中选择一个添加到当前排列的开头。同时,我们会计算全排列的数量,使用阶乘 `math.factorial(n)` 来得到。 请注意,如果你打算在大数值下运行此程序,阶乘可能会很快变得非常大,可能导致整数溢出。在实际应用中,可以考虑使用其他数据结构或算法优化处理大数值的情况。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值