组合运算——深度优先遍历
来源:互联网 发布:java编辑软件 编辑:程序博客网 时间:2024/06/05 19:27
请考虑一个被空格分隔的,由1到N的整数组成的递增数列:1 2 3 ... N。现在请在数列中插入表示加的“+”,或者表示减“-”,亦或者表示空白的“ ”(例如1-2 3就等于1-23),来将每一对数字组合成一个表达式(第一个数字前无空格)。计算该表达式的结果并判断其值是否为0。请你写一个程序找出所有产生和为零的长度为N的数列。
输入为一行,包含一个整数N(3≤N≤9)。
输出为所有在每对数字间插入“+”, “-”, 或 “ ”后能得到和为零的数列,并按照字典(ASCII码)序排列。
样例输入
7
样例输出
1+2-3+4-5-6+7
1+2-3-4+5+6-7
1-2 3+4+5+6+7
1-2 3-4 5+6 7
1-2+3+4-5+6-7
1-2-3-4-5+6+7
思路:代码是参考的别人的,没有注释,有的地方实在看不懂,就稍微改动,感觉这样更好理解吧
n个数的话,共有3^(n-1)个表达式,逐个计算结果,是零就输出。
比如:1+2 3+4-5 可以看做0+1 2+3+4-5;
per记录上一次运算的数字,比如per=2,为了防止当前运算是“ ”时,下次会sum=sum-2+2*10+3,但是先需要sum-2,
再加2*10+3;所以引入per,否则无法将上一次的数字记录,遇到空格,无法回退上一次运算。
那如果上一次是“-”呢,不是“+”,所以引入per_x,记录上一次的运算符,方便回退。
代码:
#include <stdio.h>#include<iostream>using namespace std;const int MAX = 10;int test[MAX];int N;void dfs(int);int main(){ test[1]=1; scanf("%d", &N); dfs(2); return 0;}void dfs(int T){ if(T == N+1) { int sum = 0; int per = 0; int per_x = 1; for(int i = 1; i <= N; i++){ if(test[i] == 1) { sum += i; per = i; per_x = 1; } else if(test[i] == 2) { sum -= i; per = i; per_x = 2; } else { if(x == 1) { sum -= temp; temp = temp*10+i; sum+=temp; } else { sum += temp; temp = temp*10+i; sum-=temp; } } } if(!sum) { printf("1"); for(int i = 2; i <= N; i++) if(test[i] == 1) { printf("+%d", i); } else if(test[i] == 2) { printf("-%d", i); } else if(test[i] == 3) { printf(" %d", i); } printf("\n"); } return ; } test[T] = 3; dfs(T+1); test[T] = 1; dfs(T+1); test[T] = 2; dfs(T+1);}
阅读全文
0 0
- 组合运算——深度优先遍历
- 数据结构——深度优先遍历和广度优先遍历
- 组合算法——深度优先搜索
- 深度优先搜索——DFS遍历
- 深度优先——遍历Linux文件系统
- 图的遍历 -深度优先—C
- 图的遍历(一)—深度优先遍历
- 从排列到组合——深度优先搜索
- poj 2488——dfs深度优先遍历
- 图的遍历——深度优先搜索
- 深度优先搜索遍历(DFS)——邻接矩阵存储
- 第十二周项目--深度优先遍历——DFS
- 算法基础——DFS(深度优先遍历)
- 5.3城市地图——图的深度优先遍历
- 数据结构(18)——深度优先遍历
- 图——连通分量与深度优先遍历
- [深度优先遍历—栈实现]求图中两点是否连通
- 图的遍历—深度、广度优先搜索
- Fine Uploader文件上传组件应用介绍
- LuoguP3938斐波那契
- MySQL如何查看,删除用户
- 基于N-gram的双向最大匹配中文分词
- GA
- 组合运算——深度优先遍历
- 决策树基础篇(一)
- Android应用项目绑定appcom_v7打包时,出现错误:"XXX"isnottranslatedin"af"(Afrikaans),"am"(Amharic),"ar"(Arabic).....
- C++ 函数模板与类模板
- 酷派手机(Coolpad 8297-T01)在Android开发工具如AndroidStudio、Eclipse中无法打印Log
- Sharing Your Computer's Internet Connection in Windows 10
- 【复习记录】拓扑排序
- ES6系列之---repeat()
- 光源设置