poj1950(dfs)
来源:互联网 发布:手机性能测评软件 编辑:程序博客网 时间:2024/04/29 21:39
http://poj.org/problem?id=1950
题意:给你一个数N,求1~n中通过+-.运算得为0得方案有多少,并输出前20种。.的意思是合并
思路:没剪纸,需要注意的是两两位数合并要*100,不是*10.还有就是最多要输出20种,不然会OLE。。。。。。,另外本身是打算做1905的。。。。
#include <iostream>#include <cstdio>using namespace std;char ch[100];int n,sum;int getNumLen(int i){int k = i;while(ch[i] == '.' && i < n) i++;return i-k+1;}void isRight(){int i = 1;int ans = 1;while(i < n){if (ch[i] == '.'){while(ch[i] == '.' && i < n){i++;ans*=10;if (i > 9) ans*= 10;ans+=i;}continue;}if (ch[i] == '+'){i++;int p = i;while(ch[i] == '.' && i < n){i++;p*=10;if (i > 9) p*= 10;p+=i;}ans += p;continue;}if (ch[i] == '-'){i++;int p = i;while(ch[i] == '.' && i < n){i++;p*=10;if (i > 9) p*= 10;p+=i;}ans -= p;continue;}}if (ans == 0) {if (sum < 20){for (int i = 1; i < n; i++)cout << i << " " << ch[i] << " ";cout << n << endl;}sum++;}}void dfs(int x){if (x == n) {isRight();return ;}ch[x] = '+';dfs(x+1);ch[x] = '-';dfs(x+1);ch[x] = '.';dfs(x+1);}int main(){scanf("%d", &n);sum = 0;dfs(1);printf("%d\n", sum);}
0 0
- poj1950 DFS
- poj1950(dfs)
- poj1950
- poj1950 深搜
- DFS
- DFS
- dfs
- dfs
- dfs
- dfs
- DFS
- DFS
- dfs
- DFS
- DFS
- DFS
- dfs
- DFS
- Android实现推送方式解决方案
- effective c++ 学习笔记1:让自己习惯C++
- 《编写高质量代码改善C++程序的150个建议》简要归纳
- 扩展方法
- NSTimer
- poj1950(dfs)
- VC6.0重装后新建选项卡中没有关于MFC工程的选项的解决方案
- 安装Linux到开发板
- define 函数 C++
- 深圳宝安工控机硬盘克隆
- xml 编写 android 圆角背景
- 软件人员推荐书目
- 解决hibernate写入mysql中文乱码问题
- “什么找字” APP STORE 见