24点问题算法
来源:互联网 发布:虚拟软件 编辑:程序博客网 时间:2024/05/21 08:33
DFS
代码来自 http://blog.csdn.net/hjkhjk007/article/details/9016489
#include <iostream>#include <string>#include <cmath>#include <sstream>using namespace std;const double PRECISION = 1E-6;const int COUNT = 4;const int RESULT = 24;double number[COUNT]; //这里一定要用double,看看第一题的答案就知道为什么了string expression[COUNT]; //保存表达式bool Test(int n){//递归结束 if (n == 1) { if (fabs(number[0] - RESULT) < PRECISION) { cout << expression[0] << endl; return true; } else return false; }//递归过程for (int i = 0; i < n; i++){ for (int j = i + 1; j < n; j++) { double a, b; string expa, expb; a = number[i]; b = number[j]; number[j] = number[n - 1]; expa = expression[i]; expb = expression[j]; expression[j] = expression[n - 1]; expression[i] = '(' + expa + '+' + expb + ')'; number[i] = a + b; if (Test(n - 1)) return true; //减号有两种情况,a-b与b-a expression[i] = '(' + expa + '-' + expb + ')'; number[i] = a - b; if (Test(n - 1)) return true; expression[i] = '(' + expb + '-' + expa + ')'; number[i] = b - a; if (Test(n - 1)) return true; expression[i] = '(' + expa + '*' + expb + ')'; number[i] = a * b; if (Test(n - 1)) return true; //除法也有两种情况,a/b与b/a if (b != 0) { expression[i] = '(' + expa + '/' + expb + ')'; number[i] = a / b; if (Test(n - 1)) return true; } if (a != 0) { expression[i] = '(' + expb + '/' + expa + ')'; number[i] = b / a; if (Test(n - 1)) return true; } //恢复数组 number[i] = a; number[j] = b; expression[i] = expa; expression[j] = expb; }}return false;}int main(void){ for (int i = 0; i < COUNT; i++) { char buffer[20]; int x; cin >> x; number[i] = x; stringstream ss; ss << x; expression[i] = ss.str(); } if (Test(COUNT)) cout << "Success" << endl; else cout << "Fail" << endl; return 0;}
问题2. (http://www.careercup.com/question?id=16230693)
given an int array with no duplicate numbers, write a function to return number of ways to calculate a target number.
example: given {2,4,6,8} Target = 12
2 + 4 + 6 = 12,
4 + 8 = 12,
6 + 8 - 2 = 12,
2 - 4 + 6 + 8 = 12,
return 4
int getNoOfWays(int array[], int length, int index, int target){ if(index >= length && target != 0) return 0; if(target == 0) return 1; int x = getNoOfWays(array, length, index+1, target); int y = getNoOfWays(array, length, index+1, target-array[index]); int z = getNoOfWays(array, length, index+1, target+array[index]); return x+y+z;}int main(void){<span style="white-space:pre"></span>int array[] = {2,4,6,8};<span style="white-space:pre"></span>cout << getNoOfWays(array, 4, 0, 12) << endl;<span style="white-space:pre"></span>return 0;}
0 0
- 24点问题算法
- 关于24点问题的算法
- 分治算法-最近点问题
- c/c++算法之“24点”经典问题
- [修改]24点算法
- 24点算法
- 24点算法
- 24点算法
- 24点算法
- 24点算法
- 24点经典算法
- 24点算法实现
- 24点算法2
- 24点算法。c++。
- 24点算法
- 24点游戏算法
- 24点算法
- 24点算法
- java 执行sql脚本的3种方式 (ant,ibatis,ScriptRunner)
- 【untiy3d】NavMesh初步学习及应用
- cocos2d-x屏幕适配
- OC中对Block理解
- Google 的 Physical Web 项目究竟是什么,会带来哪些改变?
- 24点问题算法
- Cocos2dx3.0 疑难解答系列 (五)ClippingNode 在小米等手机,出现白屏,显示不正常的现象
- Oracle数据库中BLOB字段的介绍
- scoket入门说明
- [Python]Input/Output and str Formatting
- linux内核数据库sqlite3的移植和简单操作
- 电影冷知识
- STM32学习笔记(串口、IAP)
- ie6、7、8、9单独hack兼容写法