一个整数数组,有n个整数,如何找其中m个数的和等于另外n-m个数的和?

本文介绍了一个C++程序,该程序包含用于计算整数数组总和的函数getSum,以及一个递归函数findNumsEqSum,用于找出数组中元素组合等于给定目标值的所有情况,并打印这些组合与剩余元素。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

int getSum(int* arr, int len) {
	int sum = 0;
	for (int i = 0; i < len; ++i) {
		sum += arr[i];
	}
	return sum;
}

void difPrint(int* arr, int len, vector<int> vct) {
	cout << vct.size() << " =m 数组: ";
	for (int i = 0; i < vct.size(); ++i) {
		cout << vct[i] << " ";
	}
	cout << endl;

	cout << len - vct.size() << " =n-m 数组: ";
	int vid = 0;
	for (int i = 0; i < len; ++i) {
		if (vct[vid] == arr[i]) {
			vid++;
			continue;
		} else {
			cout << arr[i] << " ";
		}
	}
	cout << endl << endl;
}

//vector<int> result;
void findNumsEqSum(int* arr, int step, int len, int curSum, int sum,
		vector<int> vct) {
	if (!arr || !len || curSum > sum || step == len) {
		return;
	}
	if (sum == curSum) {
		difPrint(arr, len, vct);
	} else {
		vct.push_back(arr[step]);
		findNumsEqSum(arr, step + 1, len, curSum + arr[step], sum, vct);
		vct.pop_back();
		findNumsEqSum(arr, step + 1, len, curSum, sum, vct);
	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值