组合数的实现

求出从数组a中取出n个元素的所有组合

#include<iostream>
using namespace std;
int a[10];

//按索引从小到大
//这里的start是数组头部a[0]的下标0
void DFS1(int a[], int start, int a_len, int result[], int count, int num)
{
	for (int i = start; i < a_len + 1 - count; ++i) //i为数组a的某个索引
	{
		result[count - 1] = i;   //储存索引
		if (count == 1)
		{
			for (int j = num - 1; j >= 0; j--)
			{
				cout << a[result[j]] << " ";
			}
			cout << endl;
		}
		else DFS1(a, i + 1, a_len, result, count - 1, num);
	}
}

//按索引从大到小
//这里的start是数组尾部a[n-1]的下标n-1
void DFS2(int a[], int start, int result[], int count, int num)//i为数组a的某个索引
{

	for (int i = start; i >= count-1; i--)
	{
		result[count - 1] = i; //储存索引
		if (count == 1)
		{
			for (int j = num - 1; j >= 0; j--)
			{
				cout << a[result[j]] << " ";
			}
			cout << endl;
		}
		else DFS2(a, i - 1, result, count - 1, num);
		
	}
}
int main()
{
	freopen("input.txt", "r", stdin);
	int result[6];
	for (int i = 0; i < 10; ++i) cin >> a[i];
	DFS1(a, 0, 10, result, 6, 6);
	cout << endl << endl;
	DFS2(a, 9, result, 6, 6);
	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值