• 22-算24


    /*题目内容:

     问题描述:输入4个数,通过 加、减、乘、除运算看能否得到 结果 24,每个数只用一次。

    输入描述

    输入四个正整数

    输出描述

    能通过某种方式得到24则输出1,不能则输出0

    输入样例
    6 6 6 6


    输出样例

    1
    */
    // 使用递归的思路求解:求四个数的运算结果,运算下去,第一步后就是两个数合并成一个,算三个数的结果,
    // 所以算到最后必然是得的两个数,进行运算得到一个数,最后递归的结束就是当只剩下一个数时是否等于24,等于就对了
    //返回1,否则返回0,注意的是有除法运算就必定进行浮点数运算了,所以,最后判断是否等于24,不能直接用 == 24 来判断,
    //需要和24做差当差小于无穷小时就认为相等了,无穷小可以取 1e-6等。

    #include <iostream>
    //#include <algorithm>
    #include <cmath>
    using namespace std;

    int suan(double *b, int n){
        if(n == 1){
            if(fabs(24 - b[0]) <= 0.000000001)  //fabs()是math里判断绝对值的
                return 1;
            else
                return 0;    
        }    
        double c[4];
        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)     //去掉枚举的两个数,就是剩下的数
                        c[m++] = b[k];
                }
                c[m] = b[i] + b[j];   //尝试各种运算
                if(suan(c, m + 1))    //进行递归,并判断,若可以组成了,就结束,没有就向下尝试其他运算
                    return 1;
                c[m] = b[i] - b[j];
                if(suan(c, m + 1))
                    return 1;
                c[m] = b[j] - b[i];   
    //            if(suan(c, m + 1));
                if(suan(c, m + 1))
                    return 1;
                c[m] = b[i] * b[j];
                if(suan(c, m + 1))
                    return 1;
                if(b[i] != 0){
                    c[m] = b[j] / b[i];    //进行除法法前线保证除数非零
                    if(suan(c, m + 1))
                        return 1;
                }
                if(b[j] != 0){
                    c[m] = b[i] / b[j];
                    if(suan(c, n - 1))
                        return 1;
                }
            }        
        }
            return 0;
    }


    int main(){
        double a[5];
        for(int i = 0; i < 4; i++)
            cin >> a[i];
        cout << suan(a, 4);
        return 0;
    }

  • 相关阅读:
    async
    subing用法
    vue中子组件调用父组件的方法
    Python—创建目录
    Python—访问限制
    Python—实例方法,实例数据(类属性,实例属性)
    Python—对象,类
    tail命令
    head命令
    pwd命令
  • 原文地址:https://www.cnblogs.com/zhumengdexiaobai/p/7429765.html
Copyright © 2020-2023  润新知