递归——算24
来源:互联网 发布:java 垃圾回收 手动 编辑:程序博客网 时间:2024/06/10 11:55
//
// Created by 朱正天 on 2017/8/10.
//http://cxsjsxmooc.openjudge.cn/2017t1summerw4/1/
//递归为什么能不断调用自己,因为所有问题都是同一个重复性的动作、解决方案。请考虑周全。
//理解算法本质,需要先读懂题目,再熟练算法概念,最后最重要的是,清除自己创造的函数用法,一定要符合算法概念。自身概念一定要清晰。
问题分析:
//n个数算24,先用两个数算,然后和剩下的n-2个数算,总共n-1个数;这样构成递归想法
创造函数:
//count24(inta[],int n)代表用a[n]来算出24
递归概念之一:
//递归边界条件还是一个数是24就是等式
#include <iostream>
#include <cstdio>
#include <cmath>
#define EPS1e-6
doublea[5]={5,5,5,1};//a[]原始输入数据,修改着玩
boolisZero(doublex);
using namespacestd;
boolcount24(doublea[],intn){//另开数组b[]为了实践实验
if(n==1){//边界条件
if(isZero(a[0]-24))return true;
else returnfalse;
}
doubleb[5];
for(inti = 0; i < n-1; ++i){
for(intj=i+1;j<n;++j) {//选2个数出来构成
intm = 0;
for(intk = 0; k <n; ++k) {
if(k != i && k != j)
b[m++] = a[k];//把剩下的数放进b[],完成n-1个数共同算24的转移使命,这和函数用法相关count24()
}
b[m] = a[i] +a[j];
if(count24(b, m + 1)) {//m
数组下标从0开始,所以调用count24()一定要m+1 returntrue;
}
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;
}
bool isZero(doublex){
return fabs(x)<=EPS;
}
int main()
{
cout<<count24(a,4);
return 0;
}
//
// Created by 朱正天 on 2017/8/10.
//http://cxsjsxmooc.openjudge.cn/2017t1summerw4/1/
#include <iostream>
#include <cstdio>
#include <cmath>
#define EPS 1e-6
doublea[5]={5,5,5,1};//a[]原始输入数据,修改着玩
bool isZero(double x);
using namespace std;
bool count24(double a[],int n){//另开数组b[]为了实践实验
if(n==1){
if(isZero(a[0]-24)) returntrue;
else return false;
}
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[]
}
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;
}
bool isZero(double x){
return fabs(x)<=EPS;
}
int main()
{
cout<<count24(a,4);
return 0;
}
来自 <http://write.blog.csdn.net/postedit/77093573>
- 递归——算24
- 递归 递归 递归 —深入浅出
- 递归函数——头递归和尾递归
- 递归——迭代是人,递归是神
- 漫谈递归——递归的思想
- 归并排序—递归&非递归
- 递归法算24
- 递归算24点
- 递归之算24
- 递归3---算24
- 算法——递归
- 汉诺塔——递归
- 算法——递归
- 递归——汉诺塔
- 算法——递归
- POJ2876——递归
- 汉诺塔——递归
- 蟠桃会——递归
- Leetcode 442. Find All Duplicates in an Array
- 关于js模糊匹配
- linux的poll机制
- js生成随机数(数字+字母)
- iOS 逆向REMOTE HOST IDENTIFICATION HAS CHANGED 问题解决
- 递归——算24
- 计算机视觉:从CV基础到深度学习
- 日期插件 pikaday.js 自己使用的小心得 希望能帮到你们
- 纯原生打造GridView单行横向滑动(宽度自适应在父布局居中),手机屏幕px和dp的互换方法,附禁止滑动的自定义方法
- Java中一个类怎么实现两个接口中相同名字的抽象方法
- WPF 为PasswordBox控件的Password增加绑定功能
- maven配置环境
- 高德地图vs百度地图
- 更换jdk版本:jdk1.8更换为jdk1.7之后输入java -version还是出现1.8的版本号