栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

【学习记录】C语言部分和问题

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【学习记录】C语言部分和问题

给定整数a1a2、…、an,判断是否可以从中选出若干数,使它们的和恰好为k。其中

样例:

输入

   n=4

   a={1,2,4,7}

k=13

输出

  Yes (13=2 + 4 +7)

输入

   n=4

   a={1,2,4,7}

   k=15

输出

  No

程序代码及测试结果:

#include 
bool dfs(int n, int a[], int b[], int k, int sum, int step);

int main() {
	while (1) {
		int n, k;
		scanf("%d", &n);
		int a[n], flag[n] = {0};
		int i, sum = 0, step = 0;
		for (i = 0; i < n; i++) {
			scanf("%d", &a[i]);
		}
		scanf("%d", &k);
		if (dfs(n, a, flag, k, sum, step)) {
			printf("YES(%d=", k);
			for (i = 0; i < n; i++) {
				if (flag[i] == 1)
					printf("%d+", a[i]);
			}
			printf("b)n");
		} else
			printf("NO");
	}
}

bool dfs(int n, int a[], int flag[], int k, int sum, int step) {
	if (step == n)
		return sum == k;
	if (dfs(n, a, flag, k, sum + a[step], step + 1)) {
		flag[step] = 1;
		return true;
	}
	if (dfs(n, a, flag, k, sum, step + 1)) {
		flag[step] = 0;
		return true;
	}
	return false;
}

2022/5/15

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/886570.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号