ALGO-115_蓝桥杯_算法训练_和为T(枚举)
问题描述
从一个大小为n的整数集中选取一些元素,使得它们的和等于给定的值T。每个元素限选一次,不能一个都不选。
输入格式
第一行一个正整数n,表示整数集内元素的个数。
第二行n个整数,用空格隔开。
第三行一个整数T,表示要达到的和。
输出格式
输出有若干行,每行输出一组解,即所选取的数字,按照输入中的顺序排列。
若有多组解,优先输出不包含第n个整数的;若都包含或都不包含,优先输出不包含第n-1个整数的,依次类推。
最后一行输出总方案数。
样例输入 - - - 样例输出
- -
- - 数据规模和约定
<=n<=
T<=maxlongint
集合中任意元素的和都不超过long的范围
记:
一开始写的代码量大,很不便于理解
于是上网搜寻,参考了一篇使用二进制枚举输出的方法,代码少且易读,学习了
(代码参考:https://blog.csdn.net/murphypu/article/details/69053861)
关于枚举子集的方法(包含二进制枚举):https://www.cnblogs.com/itlqs/p/5720784.html
解题思路:
题目要求:"若有多组解,优先输出不包含第n个整数的;若都包含或都不包含,优先输出不包含第n-1个整数的,依次类推。"
该输出要求可以通过二进制枚举输出实现
二进制枚举,以题目输入为例

枚举输出(代表数组下标)与题意符合,故采用
AC代码:
#include <stdio.h> int main(void)
{
int i,j;
int n;
long long t,sum;
long long arr[+];
int count = ; scanf("%d",&n);
for (i = ; i < n ; i ++)
{
scanf("%lld",&arr[i]);
}
scanf("%lld",&t); for (i = ; i < (<<n) ; i ++)
{
sum = ;
for (j = ; j < n ; j ++)
{
/*找数对应的二进制,其中二进制中为1的即是数组中要选择的数*/
if (i&(<<j))
{
sum += arr[j];
}
} if (sum == t)
{
for (j = ; j < n ; j ++)
{
if (i&(<<j))
printf("%lld ",arr[j]);
}
printf("\n");
count ++;
}
}
printf("%d",count);
return ;
}
ALGO-115_蓝桥杯_算法训练_和为T(枚举)的更多相关文章
- [蓝桥杯]ALGO-20.算法训练_求先序排列
		
问题描述 给出一棵二叉树的中序与后序排列.求出它的先序排列.(约定树结点用不同的大写字母表示,长度<=). 输入格式 两行,每行一个字符串,分别表示中序和后序排列 输出格式 一个字符串,表示所求 ...
 - [蓝桥杯]ALGO-16.算法训练_进制转换
		
问题描述 我们可以用这样的方式来表示一个十进制数: 将每个阿拉伯数字乘以一个以该数字所处位置的(值减1)为指数,以10为底数的幂之和的形式.例如:123可表示为 1*102+2*101+3*100这样 ...
 - [蓝桥杯]ALGO-15.算法训练_旅行家的预算
		
问题描述 一个旅行家想驾驶汽车以最少的费用从一个城市到另一个城市(假设出发时油箱是空的).给定两个城市之间的距离D1.汽车油箱的容量C(以升为单位).每升汽油能行驶的距离D2.出发点每升汽油价格P和沿 ...
 - [蓝桥杯]ALGO-124.算法训练_数字三角形
		
问题描述 (图3.1-1)示出了一个数字三角形. 请编一个程序计算从顶至底的某处的一条路 径,使该路径所经过的数字的总和最大. ●每一步可沿左斜线向下或右斜线向下走: ●<三角形行数≤: ●三角 ...
 - [蓝桥杯]ALGO-122.算法训练_未名湖边的烦恼
		
问题描述 每年冬天,北大未名湖上都是滑冰的好地方.北大体育组准备了许多冰鞋,可是人太多了,每天下午收工后,常常一双冰鞋都不剩. 每天早上,租鞋窗口都会排起长龙,假设有还鞋的m个,有需要租鞋的n个.现在 ...
 - [蓝桥杯]ALGO-116.算法训练_最大的算式
		
问题描述 题目很简单,给出N个数字,不改变它们的相对位置,在中间加入K个乘号和N-K-1个加号,(括号随便加)使最终结果尽量大.因为乘号和加号一共就是N-1个了,所以恰好每两个相邻数字之间都有一个符号 ...
 - [蓝桥杯]ALGO-101.算法训练_图形显示
		
问题描述 编写一个程序,首先输入一个整数,例如5,然后在屏幕上显示如下的图形(5表示行数): * * * * * * * * * * * * * * * 题目描述 代码如下: #include < ...
 - [蓝桥杯]ALGO-97.算法训练_排序
		
题目描述: 问题描述 编写一个程序,输入3个整数,然后程序将对这三个整数按照从大到小进行排列. 输入格式:输入只有一行,即三个整数,中间用空格隔开. 输出格式:输出只有一行,即排序后的结果. 输入输出 ...
 - [蓝桥杯]ALGO-92.算法训练_前缀表达式
		
问题描述 编写一个程序,以字符串方式输入一个前缀表达式,然后计算它的值.输入格式为:“运算符 对象1 对象2”,其中,运算符为“+”(加法).“-”(减法).“*”(乘法)或“/”(除法),运算对象为 ...
 - [蓝桥杯]ALGO-90.算法训练_出现次数最多的整数
		
问题描述 编写一个程序,读入一组整数,这组整数是按照从小到大的顺序排列的,它们的个数N也是由用户输入的,最多不会超过20.然后程序将对这个数组进行统计,把出现次数最多的那个数组元素值打印出来.如果有两 ...
 
随机推荐
- Python之路,第十九篇:Python入门与基础19
			
python3 面向对象3 数值转换函数重载: str(obj) __str__ complex(x) __complex__ int(obj) ...
 - css3的calc()
			
计算大小宽度距离的一个计算函数 使用方法 再括号中进行加减乘除的运算 例如: width : calc(100% - 75px) 注意 :符号左右两边要有空格
 - C++学习(十七)(C语言部分)之 指针
			
复习 数组定义格式 类型 数组名[数组大小]数组名+下标 int arr[2][3]={{1,2,3},{4,5,6}}; int arr[][3]={1,2,3,4,5,6};//二维数组定义的时候 ...
 - js添加select中option
			
1.js代码 $("#year").append("<option value="+value的值+">"+内容+"& ...
 - 从一到无穷大:科学中的事实和臆测 (G. 伽莫夫 著)
			
第一部分 做做数字游戏 第一章 大数 (已看) 第二章 自然数和人工数 (已看) 第二部分 空间,时间与爱因斯坦 第三章 空间的不寻常的性质 (已看) 第四章 四维世界 (已看) 第五章 时间和空间的 ...
 - Roll a ball 学习
			
using UnityEngine; using System.Collections; /// <summary> /// 相机控制 /// </summary> publi ...
 - c++内存泄漏原因及解决办法(智能指针)
			
内存泄漏 由于疏忽或错误造成程序未能释放已经不再使用的内存的情况.内存泄漏并非指内存在物理上的消失,而是应用程序分配某段内存后,由于设计错误,失去了对该段内存的控制,因而造成了内存的浪费. 内存泄露的 ...
 - 嵌入式LINUX设置时间
			
date -s "2018-12-15 08:55:00" 安装NTP从网络获取时间 基于Linux的嵌入式开发,需要用到本地的时间,但是网上找了很多修改时间的命令,但大多是Lin ...
 - ML(3)——线性回归
			
在统计学中,线性回归(Linear Regression)是利用称为线性回归方程的最小平方函数对一个或多个自变量和因变量之间关系进行建模的一种回归分析.这种函数是一个或多个称为回归系数的模型参数的线性 ...
 - Redis 多个数据库
			
注意:Redis支持多个数据库,并且每个数据库的数据是隔离的不能共享,并且基于单机才有,如果是集群就没有数据库的概念. Redis是一个字典结构的存储服务器,而实际上一个Redis实例提供了多个用来存 ...