6 全排列

描述
任意输入 n 个不重复的整数序列,输出序列的全排列。输入
测试数据有多组,第一行是整数 t (0<t<20 ),代表测试组数。每组测试数据有两行,第一行是整数的个数 n(0<n<6) ,第二行是 n 个
不重复的整数。
输出
按递增的顺序输出序列的全排列。每个测试数据后面输出一个空行。
样例输入
1
3
1 3 5
样例输出
1 3 5
1 5 3
3 1 5
3 5 1
5 1 3
5 3 1

递归,回溯,排序

#include<cstdio>
#include<algorithm>
using namespace std;
int num[6];
int numb[6];
int vis[6];
void digui(int cnt,int n){
	if(cnt==n){
		for(int i=0;i<n;i++){
			printf("%d ",numb[i]);
		}
		printf("\n\n");
		return;
	}
	for(int i=0;i<n;i++){
		if(!vis[i]){
			vis[i] = 1;
			numb[cnt] = num[i];
			digui(cnt+1,n);
			vis[i]=0;
		}
	}
}
int main(){
	//freopen("data.txt","r",stdin);
	int n,times;
	scanf("%d",&times);
	while(times--){
		scanf("%d",&n);
		for(int i=0;i<n;i++){
			scanf("%d",&num[i]);
		}
		sort(num,num+n);
		digui(0,n);
	}
	return 0;
}

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据引用\[1\]和引用\[2\]的代码,可以使用VBA编程语言来生成8选6的全排列。下面是一个示例代码: ```vba Dim N '用于增加动态数组下标 Sub perm(arr, k, m, brr()) '全排列 'arr为需要全排列的数组。k为数组下标,m为上标,brr为存放结果的数组 Dim i As Integer If k > m Then N = N + 1 For i = 0 To m ReDim Preserve brr(1 To m + 1, 1 To N) brr(i + 1, N) = arr(i) Next i Else For i = k To m Call swap(arr, k, i) Call perm(arr, k + 1, m, brr()) Call swap(arr, k, i) Next i End If End Sub Sub swap(arr, i, j) '数据交换 Dim t t = arr(i) arr(i) = arr(j) arr(j) = t End Sub Sub main() Dim brr() N = 0 arr = Array(1, 2, 3, 4, 5, 6, 7, 8) '8选6的数字数组 '对arr全排列 Call perm(arr, LBound(arr), UBound(arr), brr) \[A1\].Resize(UBound(brr, 2), UBound(brr)) = Application.Transpose(brr) End Sub ``` 这段代码会生成8选6的全排列,并将结果写入Excel的A1单元格开始的区域。你可以根据需要修改数组的内容和输出结果的位置。 #### 引用[.reference_title] - *1* [Excel·VBA数组排列函数](https://blog.csdn.net/hhhhh_51/article/details/126770841)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [VBA全排列组合输出](https://blog.csdn.net/qq_24499417/article/details/85859464)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [小白量化彩票实战(5)彩票号码快速生成组合及利用数据库生成彩票号码组合](https://blog.csdn.net/hepu8/article/details/114357181)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值