递归之算24
来源:互联网 发布:权限管理的软件 编辑:程序博客网 时间:2024/06/05 10:21
描述:
给出4个小于10的正整数,你可以使用加减乘除以及括号把这四个数字连接起来得到一个表达式,现在的问题是,是否存在一种方式使得到的结果刚好为24, 这里加减乘除以及括号的运算结果以及优先级和我们平时的定义一样,(除法是实数除法)
例:5 5 5 1 5*(5-1/5)=24
1 1 4 2 无法得到24
代码实现
#include<iostream>#include<cmath>#define EPS 1e-6using namespace std;bool IsZero(double n){ return fabs(n) <= EPS;}bool Count24(double a[],int n){ if( n == 1) { if(IsZero(a[0] - 24)) return true; else return false; } else { double b[5]; for(int i = 0;i < n-1; i++) { for(int j = i+1;j < n;j++) { int m = 0; for(int k = 0;k < n;k++) if(k != i && k != j) b[m++] = a[k]; b[m] = a[i] + a[j]; if(Count24(b,m+1)) return true; b[m] = a[i] - a[j]; if(Count24(b,m+1)) return true; b[m] = a[j] - a[i]; if(Count24(b,m+1)) return true; b[m] = a[i] * a[j]; if(Count24(b,m+1)) return true; if(!IsZero(a[j])) { b[m] = a[i] / a[j]; if(Count24(b,m+1)) return true; } if(!IsZero(a[i])) { b[m] = a[j] / a[i]; if(Count24(b,m+1)) return true; } } } } return false; } int main() { double a[5]; for(int i = 0;i < 4;i++) cin >> a[i]; while(a[0] != 0) { if(Count24(a,4)) cout << "YES" << endl; else cout << "NO" << endl; for(int i = 0;i < 4;i++) cin >> a[i]; } return 0; }
0 0
- 递归之算24
- 递归法算24
- 递归算24点
- 递归3---算24
- 递归优化之尾递归
- 递归优化之尾递归
- Java递归实现算24
- 递归——算24
- 【递归练习】算24点
- 递归之组合
- 递归之探索
- JAVA数据结构之递归
- Tinyxml之递归解析
- JAVA数据结构之递归
- 归并排序之----递归
- 递归之初解
- oralce之递归算法
- C语言之递归
- Piggy-Bank [dp][完全背包]
- hdu3853 LOOPS 【概率DP+期望问题】
- JS字符串的一些常用方法
- 简单的单向链表的创建(总结)
- 第一次写博客,记录一下今天遇到的一个错误
- 递归之算24
- mahout in action推荐系统代码解释
- 《客户端脚本语言-JavaScript》
- 自定义View
- 《MySQL高效编程》学习笔记--基础篇
- JavaSE_16th_常用类——String类常用方法
- CentOS7developer
- ContentProvider(内容提供者)与ContentResolver(内容访问者)
- POJ1426 Find The Multiple