首页 > 学院 > 开发设计 > 正文

求24(递归)

2019-11-08 03:18:42
字体:
来源:转载
供稿:网友

问题描述:见下图

程序代码:

/* *输入:输入数据包括4个小于10的整数。  输出:对于如果可以得到24,输出“YES”;否则输出“NO” */ #include <iostream> #include <cmath> using namespace std; double a[5]; #define EPS 1e-6 bool isZero(double x)//判断浮点数是否小于零 {     return fabs(x) <= EPS; } bool count24(double a[],int n) {//用数组a中的n个数,计算24     if(n == 1)     {         if(isZero(a[0] - 24))            return true;         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;//还剩下m个数,m=n-2             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; } int main() {     double a[5];     for(int i=0;i<4;i++)        cin>>a[i];     bool flag = count24(a,4);     if(flag)        cout<<"YES"<<endl;     else        cout<<"NO"<<endl;     return 0; }运行结果:


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表