c++ 组合

组合

题目描述

已知一个一维数组a1..n,又已知一整数m。 如能使数组a中任意几个元素之和等于m,则输出YES,反之则为NO。

输入

输入包括两行,第一行包含两个整数n m(1<=n<20,1<=m<=1000000),第二行输入n个整数(每个数不会超过1000000)。

输出

如能使数组a中任意几个元素之和等于m,则输出YES,反之则为NO。

样例输入

6 5
2 3 1 4 2 1

样例输出

YES

提示

(None)

代码+注释

#include <bits/stdc++.h>
using namespace std;
 
int nums[101];
int n;	//数组元素个数
int m;	//数组中存在n个元素和为m
bool flag;
 
void sum(int n,int m)   //求数组中是否存在一些元素和等于m
{
	if(nums[n] == m) flag = true;  //假设数组的最后一个元素等于和m,将flag变量置为true
	else if(n == 1) return ;    //搜索完了整个数组返回
	else
	{
		sum(n - 1,m - nums[n]);   //说明取了nums[n]元素
		sum(n - 1,m);	//说明没有取nums[n] 
	} 
} 
 
int main()
{
	cin >> n;
	for(int i = 1;i <= n;i ++)
	{
		cin >> nums[i]; 
	}
	cin >> m;
	flag = false; //初始时,将flag置为false,当找到某些元素和为m的时候在sum函数中flag的值将改变
	sum(n,m);
	if(flag)
	cout << "Yes" << endl;
	else
	cout << "No" << endl;
	return 0;
}

原文链接: https://www.cnblogs.com/LJA001162/p/11032241.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    c++ 组合

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/296820

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月15日 下午6:14
下一篇 2023年2月15日 下午6:14

相关推荐