13.A={1,2,3,5}和为10的问题
题目:集合A={1,2,3,5},从中任取几个数相加等于10,并打印各得哪几个数?
补充参照:http://www.cnblogs.com/tinaluo/p/5294341.html
上午弄明白了幂集的问题,不得不说这是一个极大的突破!只要把这个思路缕清楚了,就可以解很多问题。
幂集问题,简而言之就是穷举,只是方式有特色,取某个元素,然后又舍去某个元素,隐形的借用了二叉树的先序遍历。有了这个思路,再去解本题,就变的很容易。
按照幂集的思路,其实也就是穷举集合A的所有可能,并且求每个可能的和,如果等于10,就打印那几个元素。
第一个问题,如何舍?字符串和int数组有不同,字符串可以给某个元素赋值0就算舍去,然后打印字符串,而int数组,可以用sum-=a[i]的形式,也就是先让它加,回溯的时候再减去它,等于没加。这个问题解决了!
第二个问题,如何打印是哪几个数?如本题,可以看出是2+3+5=10,就必须跟综这几个数。于是,想到用一个标志flag数组,如果某个数被加上了,就在对应的flag标志数组中标识为1,一旦得到结果,那么flag数组就是:0 1 1 1这种情形。
而界限,这里还是采用幂集的方式,i>=n。思路一旦缕清楚,代码也随之而来!再次说明,理解一个知识是极其重要的!
【3/25号补充】假如有这种可能,只要找到一个结果就终止。这里可以设置一个监视哨flag,在函数的第一步就检测,如果不设置监视,则一直穷举...
void f(....)/*函数*/
{
if(flag)/*监视标志*/
{
......./*整个函数体*/
}
}
/*--------完整代码@映雪--2016/3/19-------*/ #include <iostream>
using namespace std;
int a[]={,,,};
int flag[];
void f(int a[],int i,int n,int sum)
{
if(i>=n)
{
if(sum==)/*得到结果*/
{
for(int j=;j<;j++)
{
if(flag[j]==)
{
cout<<a[j]<<" ";
}
}
cout<<endl;
}
}
else
{
sum+=a[i];
flag[i]=;
f(a,i+,n,sum);
sum-=a[i];
flag[i]=;
f(a,i+,n,sum);
}
}
int main()
{
f(a,,,);
return ;
}
13.A={1,2,3,5}和为10的问题的更多相关文章
- 干货:用好这13款VSCode插件,工作效率提升10倍
文章每周持续更新,原创不易,「三连」让更多人看到是对我最大的肯定.可以微信搜索公众号「 后端技术学堂 」第一时间阅读(一般比博客早更新一到两篇) 大家好我是lemon, 马上进入我们今天的主题吧. 又 ...
- 64位win7硬盘安装64位ubuntu 13.04
最近本来是准备通过升级的方式把ubuntu从12.04升级到12.10再升级到13.04的,但是升级到12.10之后,可能是因为某一步的操作不当,出现无法进入系统的情况.不过还好的是升级之前保存了主要 ...
- Hadoop-2.2.0 + Hbase-0.96.2 + Hive-0.13.1(转)
From:http://www.itnose.net/detail/6065872.html # 需要软件 Hadoop-2.2.0(目前Apache官网最新的Stable版本) Hbase-0.96 ...
- 【转】64位win7硬盘安装64位ubuntu 13.04
原文网址:http://www.cnblogs.com/jiangz/p/3751617.html 最近本来是准备通过升级的方式把ubuntu从12.04升级到12.10再升级到13.04的,但是升级 ...
- Feb 5 13:07:52 plugh rsyslogd-2177: imuxsock begins to drop messages from pid 12105 due to rate-limiting
FROM:https://www.nri-secure.co.jp/ncsirt/2013/0218.html SANSインターネットストームセンターのハンドラであるJohannes Ullrichが ...
- _00018 Hadoop-2.2.0 + Hbase-0.96.2 + Hive-0.13.1 分布式环境整合,Hadoop-2.X使用HA方式
博文作者:妳那伊抹微笑 itdog8 地址链接 : http://www.itdog8.com(个人链接) 博客地址:http://blog.csdn.net/u012185296 个性签名:世界上最 ...
- 快速安装k8s,版本为1.13.8
利用rpm快速部署k8s #!/bin/bash #快速安装k8s #by love19791126 107420988@qq.com pwd=$(pwd) masteripaddr=#(ip a s ...
- 记录一则Linux SSH的互信配置过程
需求:四台Linux主机,IP地址为192.168.10.10/11/12/13,配置登录用户的互信 1.各节点ssh-keygen生成RSA密钥和公钥 ssh-keygen -q -t rsa -N ...
- 使用Expression实现数据的任意字段过滤(1)
在项目常常要和数据表格打交道. 现在BS的通常做法都是前端用一个js的Grid控件, 然后通过ajax的方式从后台加载数据, 然后将数据和Grid绑定. 数据往往不是一页可以显示完的, 所以要加分页: ...
- Python标准模块--os
1.模块简介 os模块主要包含普遍的操作系统相关操作,如果开发者希望自己开发的Python应用能够与平台无关,尤其需要关注os这个模块. 2.模块使用 2.1 os模块 1. os.name,输出字符 ...
随机推荐
- python 安装mysqldb组件
只能源码安装 源码下载: http://sourceforge.net/projects/mysql-python/files/mysql-python/1.2.3/ http://sourcefor ...
- 修改mysql的用户密码
修改的用户都以root为列.一.拥有原来的myql的root的密码: 方法一: #mysql -u root mysql> SET PASSWORD FOR 'root'@'localhost' ...
- HTML鼠标悬浮显示隐藏 JS方法
CSS样式表: @charset "utf-8"; /* CSS Document */ .a { width:80px; height:40px; top:200px; left ...
- oracle 网络环境配置
PLSQL Developer连接Oracle11g 64位数据库配置详解 最近换了台64bit的电脑,所以oracle数据库也跟着换成了64bit的,不过 问题也随之产生,由于plsql devel ...
- Syncthing搭建
现在貌似只有windows和linux比较号装. 安装 先从官网下载好Windows 32位版(我本本对应的系统版本)的Syncthing,解压后可以看到如下文件结构 Syncthing文件结构 ...
- Linux 查看当前时间
一.查看和修改Linux的时区1. 查看当前时区命令 : "date -R"2. 修改设置Linux服务器时区方法 A命令 : "tzselect"方法 B 仅 ...
- KMS激活win10专业版失败
关闭防火墙.杀毒软件之类,激活就成功了. 有个小发现,选择更改产品密钥,输入W269N-WFGWX-YVC9B-4J6C9-T83GX,同时用KMS激活,可能成功率比较高!(专业版的,来自http:/ ...
- php中错误处理机制
php中,异常处理机制是有限的,无法自动抛出异常,必须手动进行,并且内置异常有限. php把许多异常看作错误,这样就可以把这些异常想错误一样用set_error_handler接管,进而主动抛出异常. ...
- 批量MD5命名文件
#coding=utf-8 import os import hashlib def GetFileMd5(filename): if not os.path.isfile(filename): pr ...
- cron,at的权限控制
/etc/cron.deny存在 /etc/cron.deny不存在 /etc/cron.allow存在 只有/etc/cron.allow中列出的用户才能运行crontab -e:忽略/etc/ ...