zoj 1204 Additive equations
来源:互联网 发布:static修饰数组 编辑:程序博客网 时间:2024/05/20 23:29
ACCEPT
acm作业
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=204
因为老师是在集合那里要我们做这道题。所以我很是天真的就以为要用集合做,结果发现网上都是用数组简单明了地实现了,显得我的代码,特么地超级恶心!!!!!!!
在这里存档一下,别人就不要看了,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;//重置为0return;};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;//重置为0return;}dfs(c_iset, set_iter1, de + 1);}tem[de] = 0;//重置为0return;};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;}
0 0
- ZOJ 1204 Additive equations
- ZOJ 1204Additive equations
- zoj - 1204 - Additive equations
- ZOJ 1204 Additive equations
- ZOJ 1204 Additive equations
- ZOJ 1204 Additive equations
- zoj 1204 Additive equations
- zoj 1204 Additive equations
- zoj 1204 Additive equations
- ZOJ 1204Additive equations
- ZOJ 1204 Additive equations
- ZOJ 1204 Additive equations
- ZOJ 1204 Additive equations
- ZOJ 1204(Additive equations)
- ZOJ - 1204 Additive equations(搜索)
- ZOJ 1204 Additive equations (回溯)
- ZOJ-1204 Additive equations (DFS)
- ZOJ 1204 Additive equations(深搜)
- 近期会放出tlplayer for android的更新版本
- hadoop学习(七)WordCount+Block+Split+Shuffle+Map+Reduce技术详解
- SD的总线拓扑结构
- 一道趣题【公司雇佣多少员工】
- Basic Level 1025. 反转链表 (25)
- zoj 1204 Additive equations
- 3.23 listview异步加载图片
- UVA 10420 - List of Conquests
- 10361 - Automatic Poetry
- 学习win32 API开发2-走进Windows窗口程序开发
- 自然语言处理与分析(one)
- 初步实现无循环(则递归)将任意整数转任意进制字符串
- 写一个程序,分析一个文本文件中各个词出现的频率,并把频率最高的10个词打印出来
- C语言文章词语频率统计