zoj 1204 Additive equations
ACCEPT
//#include "stdafx.h"
#include"stdio.h"
#include"iostream"
#include<set>
using namespace std;
int tem[33] = { 0 };//存放加数 以便输出
int i = 0;
int flag = 0;
int c_sum=0;
void dfs(set<int> &c_iset, set<int>::iterator c_iterator, int de, int num)//num为加数个数
{
set<int>::iterator set_iter1;
if (num == 2)//两个加数时
{ for (set_iter1 = c_iterator, set_iter1++; *set_iter1 <*c_iset.rbegin(); set_iter1++)//set_iter1++,指向下一个、这里实现的是第二个加数
{
//c_sum = 0;
tem[de] = *set_iter1;
c_sum += tem[de];
// for (int k = 0; tem[k] != 0; k++)
// {
// c_sum = c_sum + tem[k];
// }
if (c_iset.find(c_sum) != c_iset.end())//找到sum 成功可输出
{
flag = 1;//成功标志
printf("%d", tem[0]);
for (int j = 1; tem[j] != 0; j++)
{
printf("+%d", tem[j]);
}
printf("=%d\n", c_sum); }
if (c_sum >= *c_iset.rbegin())//结束,不必再继续递归下去
{
tem[de] = 0;//重置为0 ,已经输出过了
return;
}
c_sum -= tem[de];
//dfs(c_iset, set_iter1, de + 1);//到下一个数 }
}
else
{
for (set_iter1 = c_iterator, set_iter1++; *set_iter1 <*c_iset.rbegin(); set_iter1++)//set_iter1++,指向下一个、这里实现的是第二个加数
{
tem[de] = *set_iter1;//减少一个数
c_sum = 0;
for (int k = 0; tem[k] != 0; k++)
{
c_sum = c_sum + tem[k];
}
if (c_sum > *c_iset.rbegin())//超过最后一个没有必要再进行下去了
{
tem[de] = 0;
return;
} num--;
dfs(c_iset, set_iter1, de + 1, num);
num++;
}
}
tem[de] = 0;//重置为0
return;
}; int main()
{
int n, m, l ;
set<int>iset;
set<int>::iterator set_iter;//
scanf("%d", &n);//多少组
while (n-- > 0)
{
scanf("%d", &m);//每组个数
iset.clear();//清空
for (int j = 0; j < m; j++)
{
scanf("%d", &l);
iset.insert(l); }
flag = 0; for (int j = 2; j < m; j++)//加数个数从2到m-1个
{
for (set_iter = iset.begin(); *set_iter <* iset.rbegin(); set_iter++)//固定的第一个加数
{ c_sum = *set_iter;
tem[0] = c_sum;
i = 1;
dfs(iset, set_iter, i,j);
}
}
if (flag == 0)
{
printf("Can't find any equations.\n");
}
printf("\n");
}
return 0;
}

set 作为参数要引用&!
注意还原,调试非常好用!
虽然做出来一点意思了,但是不符合要求。。。顺序这个,是要考我们按层次递归么?太蠢了!
但是第一次按自己的意思写出了想要的递归,我舍不得删掉,要留着
t等我写出答案,再来。。。
#include "stdafx.h"
#include"stdio.h"
#include"iostream"
#include<set>
using namespace std;
int tem[33] = { 0 };//存放加数 以便输出
int i = 0;
int flag = 0;
void dfs(set<int> &c_iset, set<int>::iterator c_iterator, int de)
{
set<int>::iterator set_iter1;
for (set_iter1 = c_iterator, set_iter1++; set_iter1 != c_iset.end(); set_iter1++)//set_iter1++,指向下一个
{
int c_sum = 0;
tem[de] = *set_iter1;
for (int k = 0; tem[k] != 0; k++)
{
c_sum = c_sum + tem[k];
}
if (c_iset.find(c_sum) != c_iset.end())//找到sum 成功可输出
{
flag = 1;//成功标志
printf("%d", tem[0]);
for (int j = 1; tem[j] != 0; j++)
{
printf("+%d", tem[j]);
}
printf("=%d\n", c_sum);
}
if (c_sum >= *c_iset.rbegin())//结束,不必再继续递归下去
{
tem[de] = 0;//重置为0
return;
}
dfs(c_iset, set_iter1, de + 1); }
tem[de] = 0;//重置为0
return;
}; int main()
{
int n, m, l, sum;
set<int>iset;
set<int>::iterator set_iter;//
scanf("%d", &n);
while (n-->0)
{
scanf("%d", &m);
iset.clear();//清空
while (m > 0)
{
scanf("%d", &l);
iset.insert(l);
m--;
}
flag = 0;
for (set_iter = iset.begin(); set_iter != iset.end(); set_iter++)
{ sum = *set_iter;
tem[0] = sum;
i = 1;
dfs(iset, set_iter, i);
}
if (flag==0)
{
cout << "Can't find any equations." << endl;
}
}
return 0;
}
zoj 1204 Additive equations的更多相关文章
- ZOJ1204——Additive equations(DFS)
Additive equations Description We all understand that an integer set is a collection of distinct int ...
- ZOJ 1204 一个集合能组成多少个等式
Additive equations Time Limit : 20000/10000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other ...
- POJ题目细究
acm之pku题目分类 对ACM有兴趣的同学们可以看看 DP: 1011 NTA 简单题 1013 Great Equipment 简单题 102 ...
- 【转】POJ百道水题列表
以下是poj百道水题,新手可以考虑从这里刷起 搜索1002 Fire Net1004 Anagrams by Stack1005 Jugs1008 Gnome Tetravex1091 Knight ...
- Additive equations--zoj
Additive equations Time Limit: 10 Seconds Memory Limit: 32768 KB We all understand that an inte ...
- ZOJ ACM 1204 (JAVA)
毕业好几年了,对算法还是比較有兴趣,所以想又一次開始做ACM题.俺做题比較任意,一般先挑通过率高的题来做. 第1204题,详细描写叙述请參考,ZOJ ACM 1204 1)难度分析 这个题目,基本的难 ...
- 重拾ZOJ 一周解题
ZOJ 2734 Exchange Cards 题目大意: 给定一个值N,以及一堆卡片,每种卡片有一个值value和数量number.求使用任意张卡片组成N的方式. 例如N = 10 ,cards(1 ...
- ZOJ题目分类
ZOJ题目分类初学者题: 1001 1037 1048 1049 1051 1067 1115 1151 1201 1205 1216 1240 1241 1242 1251 1292 1331 13 ...
- ZOJ People Counting
第十三届浙江省大学生程序设计竞赛 I 题, 一道模拟题. ZOJ 3944http://www.icpc.moe/onlinejudge/showProblem.do?problemCode=394 ...
随机推荐
- sql server 查询分析器消息栏里去掉“(5 行受影响)”
sql server 查询分析器消息栏里去掉"(5 行受影响)" 在你代码的开始部分加上这个命令: set nocount on 记住在代码结尾的地方再加上: set ...
- HTML Meta标签中的viewport属性含义及设置
两篇文章 第1篇文章 第2篇文章 http://blog.hexu.org/archives/1947.shtml 随着高端手机(Andriod,Iphone,Ipod,WinPhone等)的盛行,移 ...
- spring+hibernate 实体类注解问题
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.Ann ...
- [HDOJ3709]Balanced Number(数位dp)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3709 题意:求区间[L,R]内每一个数中是否存在一位,使得左边的各位数*距离=右边的各位数*距离(自己 ...
- [转]ZigBee On Windows Mobile--ZigBee模块天线设计
原文出处:http://www.cnblogs.com/dearsj001/archive/2008/10/26/1320029.html
- Linux链接库三(C跟C++之间动态库的相互调用)
http://www.cppblog.com/wolf/articles/74928.html http://www.cppblog.com/wolf/articles/77828.html http ...
- kaili 2.0 开启ssh远程
第一步:更改sshd_config文件
- SublimeText2 快捷键
前端神器Sublime Text3使用说明:http://www.jianshu.com/p/1f2463261ded SublimeText2 快捷键,与对应功能一览表: 快捷键 功能 ctrl+s ...
- XAF学习笔记之 Upcasting
通常,我们会定义继承层次结构,假设有类型,CustomerBase,CustomerTrialed,CustomerRegistered三个类型,并且继承结构如下: 业务对象代码定义如下: using ...
- Linux配置apache等系列
1.Linux下安装.配置PHP环境 2.ubuntu12.0.4安装apache, php ,mysql 3 CentOs中mysql的安装与配置