21xrx.com
2024-12-23 00:40:54 Monday
登录
文章检索 我的文章 写文章
C++实现24点算法
2023-07-05 12:13:46 深夜i     --     --
C++ 24点算法 计算机编程 数学运算 循环控制

24点算法是一种经典的数学游戏,它的目的是计算出4个数字通过加减乘除等运算得出结果为24的算式。虽然这个游戏看起来很简单,但是它能够锻炼人们的计算能力和思维能力,因此它受到了广泛的欢迎。

为了解决24点算法问题,我们可以使用C++编程语言来实现这个算法。下面是一个简单的C++程序来演示如何实现24点算法:


#include<iostream>

#include<cmath>

using namespace std;

double nums[4];

bool isValid(double a, double b, double c, double d){

  nums[0] = a;

  nums[1] = b;

  nums[2] = c;

  nums[3] = d;

  for(int i = 0; i < 4; i++){

    for(int j = 0; j < 4; j++){

      if(j != i){

        for(int k = 0; k < 4; k++){

          if(k != i && k != j){

            for(int l = 0; l < 4; l++){

              if(l != i && l != j && l != k){

                double res1 = nums[i] + nums[j];

                double res2 = nums[i] * nums[j];

                double res3 = abs(nums[i] - nums[j]);

                if(check(res1, nums[k], nums[l]) ||

                 check(res2, nums[k], nums[l]) ||

                 check(res3, nums[k], nums[l]))

                  return true;

                

                double res4 = nums[i] - nums[j];

                if(check(res4, nums[k], nums[l]) && res4 >= 0)

                  return true;

                

                double res5 = nums[j] - nums[i];

                if(check(res5, nums[k], nums[l]) && res5 >= 0)

                  return true;

                

                double res6 = nums[i] / nums[j];

                if(check(res6, nums[k], nums[l]))

                  return true;

                

                double res7 = nums[j] / nums[i];

                if(check(res7, nums[k], nums[l]))

                  return true;

                

              }

            }

          }

        }

      }

    }

  }

  return false;

}

bool check(double a, double b, double c){

  if(check1(a, b, c) || check1(b, a, c) || check1(c, a, b))

    return true;

  

  if(check2(a, b, c))

    return true;

  

  return false;

}

bool check1(double a, double b, double c){

  if(check2(a + b, c, 0) || check2(a - b, c, 0) ||

    check2(b - a, c, 0) || check2(a * b, c, 0))

    return true;

  

  if(b != 0 && check2(a / b, c, 0))

    return true;

  

  if(a != 0 && check2(b / a, c, 0))

    return true;

  

  return false;

}

bool check2(double a, double b, double c){

  if(abs(a + b - c) < 0.0001 || abs(a - b - c) < 0.0001 ||

    abs(b - a - c) < 0.0001 || abs(a * b - c) < 0.0001)

    return true;

  

  if(b != 0 && abs(a / b - c) < 0.0001)

    return true;

  

  if(a != 0 && abs(b / a - c) < 0.0001)

    return true;

  

  return false;

}

int main(){

  double a, b, c, d;

  cin >> a >> b >> c >> d;

  if(isValid(a, b, c, d))

    cout << "Yes" << endl;

  else

    cout << "No" << endl;

  

  return 0;

}

这个程序的核心部分是isValid函数,它的作用是检查4个数字能否通过加减乘除等运算得出结果为24。为了实现这个函数,我们将所有可能出现的运算符情况列出来,并判断结果是否等于24。

使用C++实现24点算法可以帮助我们更好地理解这个问题,并提高我们的计算能力和编程能力。通过不断的练习和尝试,我们可以更好地掌握这个算法,成为算术大师。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复