ACCEPT

acm作业
因为老师是在集合那里要我们做这道题。所以我很是天真的就以为要用集合做,结果发现网上都是用数组简单明了地实现了,显得我的代码,特么地超级恶心!!!!!!!
在这里存档一下,别人就不要看了,ZOJ的格式也真是恶心。。。居然因为这个也弄了好久,应该只有我一个人用这么 没脑的集合方式做吧。。真的是哭瞎在厕所里!!!
//#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;
}
下面的就不要看了,是第一次写错的结果每次accept都 是历经千辛万苦!!隔了要两个月了吧
========================================================================================================================================================================================================================================================================
WRONG ANSWER

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的更多相关文章

  1. ZOJ1204——Additive equations(DFS)

    Additive equations Description We all understand that an integer set is a collection of distinct int ...

  2. ZOJ 1204 一个集合能组成多少个等式

    Additive equations Time Limit : 20000/10000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other ...

  3. POJ题目细究

    acm之pku题目分类 对ACM有兴趣的同学们可以看看 DP:  1011   NTA                 简单题  1013   Great Equipment     简单题  102 ...

  4. 【转】POJ百道水题列表

    以下是poj百道水题,新手可以考虑从这里刷起 搜索1002 Fire Net1004 Anagrams by Stack1005 Jugs1008 Gnome Tetravex1091 Knight ...

  5. Additive equations--zoj

    Additive equations Time Limit: 10 Seconds      Memory Limit: 32768 KB We all understand that an inte ...

  6. ZOJ ACM 1204 (JAVA)

    毕业好几年了,对算法还是比較有兴趣,所以想又一次開始做ACM题.俺做题比較任意,一般先挑通过率高的题来做. 第1204题,详细描写叙述请參考,ZOJ ACM 1204 1)难度分析 这个题目,基本的难 ...

  7. 重拾ZOJ 一周解题

    ZOJ 2734 Exchange Cards 题目大意: 给定一个值N,以及一堆卡片,每种卡片有一个值value和数量number.求使用任意张卡片组成N的方式. 例如N = 10 ,cards(1 ...

  8. ZOJ题目分类

    ZOJ题目分类初学者题: 1001 1037 1048 1049 1051 1067 1115 1151 1201 1205 1216 1240 1241 1242 1251 1292 1331 13 ...

  9. ZOJ People Counting

    第十三届浙江省大学生程序设计竞赛 I 题, 一道模拟题. ZOJ  3944http://www.icpc.moe/onlinejudge/showProblem.do?problemCode=394 ...

随机推荐

  1. ZOJ 2182 Cable TV Network(无向图点割-最大流)

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2182 题意:给出一个无向图,问最少删掉多少个顶点之后图变得不连通 ...

  2. VMware ESXI5.0的安装配置 zz

    http://www.hotxf.com/thread-297-1-1.html 1,    Vmware ESXI 光盘一张文件大小290M,本教程是以 5.0为案例. 2,    所需要安装的操作 ...

  3. git push 403

    1. 在github上新建一个空项目. 2. git clone 到本地仓库. 3. git add [一些文件]. 4. git commit -m "first commit" ...

  4. [HDOJ5783]Divide the Sequence(贪心)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5783 题意:给n个数,要求划分成多个段,使得每一个段的任意前缀和都不小于0. 从后往前截取,这样不会影 ...

  5. POJ 3461 Oulipo(乌力波)

    POJ 3461 Oulipo(乌力波) Time Limit: 1000MS   Memory Limit: 65536K [Description] [题目描述] The French autho ...

  6. plot bar chart using python

    Example import matplotlib.pyplot as plt import plotly.plotly as py # Learn about API authentication ...

  7. Linux基础※※※※如何使用Git in Linux(一)

    参考资料: 1. https://www.linux.com/learn/tutorials/796387-beginning-git-and-github-for-linux-users/ 2. h ...

  8. 简单几步配置gitlab

    简单几步配置gitlab 之前配置gitlab需要很多步骤,要装apache2.ruby.tomcat.mysql等一片东西.有没有更简单的方式呢?现在可以借助bitnami,简化了很多. 可以参考v ...

  9. HDU5886 Tower Defence 【两遍树形dp】【最长链预处理】

    题意:N个点的一棵带权树.切掉某条边的价值为切后两树直径中的最大值.求各个边切掉后的价值和(共N-1项). 解法一: 强行两遍dp,思路繁琐,维护东西较多: dis表示以i为根的子树的直径,dis2表 ...

  10. poj3449Geometric Shapes

    链接 繁琐. 处理出来所有的线段,再判断相交. 对于正方形的已知对角顶点求剩余两顶点 (列出4个方程求解) p[].x=(p[].x+p[].x+p[].y-p[].y)/; p[].y=(p[].y ...