Java教程

编程实现24点游戏

本文主要是介绍编程实现24点游戏,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

编程实现24点游戏

  • 思路
    • 代码

思路

比如有4个数 2 11 9 7
将2与24进行加减乘除运算,比如 24-2=22 ,那么问题就是11 9 7三个数怎么运算能耐得到22,同理11与22运算 比如22/11=2 那就编程9和7如何运算得到2的问题了。
这样将4个数的问题逐步缩小成2个数的问题。
但是这种逻辑和数的顺序有关,所以一边下来如果无解,利用下标变化依次将位置提前 s3(24 - x[i], x[(i + 1) % 4], x[(i + 2) % 4], x[(i + 3) % 4]); i++;如果仍然无解,将1,3 互换2,4互换。一般会得到正确结果。
这个逻辑不会覆盖所有情况,比如需要需要(x+y)*(z+t)这种算式。

代码

#include <iostream>
#include <string>
using namespace std;
bool f = false;
string s = "";
void s2(int g, int x, int y)
{
    if (x + y == g)
    {
        s = to_string(x) + '+' + to_string(y);
        f = true;
        return;
    }
    if (x - y == g)
    {
        s = to_string(x) + '-' + to_string(y);
        f = true;
        return;
    }
    if (y - x== g)
    {
        s = to_string(y) + '-' + to_string(x);
        f = true;
        return;
    }
    if (y* x == g)
    {
        s = to_string(y)+ '*' + to_string(x);
        f = true;
        return;
    }
    if (y/x == g&&y%x==0)
    {
        s = to_string(y) + '/'+ to_string(x);
        f = true;
        return;
    }
    if (x / y == g && x % y == 0)
    {
        s = to_string(x) + '/' + to_string(y);
        f = true;
        return;
    }

}
void s3(int g, int x, int y, int z) {
    s2(g - x, y, z);
    if (f)
    {


        s = to_string(x) + '+' + s;
        return;

    }
    s2(x - g, y, z);
    if (f)
    {


        s = to_string(x) + "-(" + s+')';
        return;

    }
    
    s2(g + x, y, z);
    if (f)
    {


        s =s+'-'+ to_string(x) ;
        return;

    }
    s2(g* x, y, z);
    if (f)
    {


        s ='('+ s + ")/" + to_string(x);
        return;

    }
    if (g % x == 0) {
        s2(g / x, y, z);
        if (f)
        {


            s = to_string(x) + "*(" + s + ")";
            return;

        }
    }
    if (x % g == 0) {
                s2(x / g, y, z);
                if (f)
                {


                    s = to_string(x) + "/(" + s + ")";
                    return;

                }
    }
}
int main(int argc,char* argv[])
{
   
  
    int x[4];
   
   
        s = "";
        f = false;
      // std::cin >> x[0] >> x[1] >> x[2] >> x[3];
       x[0]= stoi(argv[1]);
       x[1] = stoi(argv[2]);
       x[2] = stoi(argv[3]);
       x[3] = stoi(argv[4]);
        for (int j = 0; j < 2; j++)// 原顺序无解时 1 3换位置,再无解2,4换位置
        {

            int i = 0;
            while (i < 4) //原顺序无解是,依次循环
            {
                s3(24 - x[i], x[(i + 1) % 4], x[(i + 2) % 4], x[(i + 3) % 4]);
                if (f)
                {


                    s = to_string(x[i]) + '+' + s;
                    cout << s << "\r\n";
                    break;

                }
                s3(24 + x[i], x[(i + 1) % 4], x[(i + 2) % 4], x[(i + 3) % 4]);
                if (f)
                {


                    s = s + "-" + to_string(x[i]);
                    cout << s << "\r\n";
                    break;

                }
                s3(24 * x[i], x[(i + 1) % 4], x[(i + 2) % 4], x[(i + 3) % 4]);
                if (f)
                {


                    s = s + "/" + to_string(x[i]);
                    cout << s << "\r\n";
                    break;

                }
                if (24 % x[i] == 0) {
                    s3(24 / x[i], x[(i + 1) % 4], x[(i + 2) % 4], x[(i + 3) % 4]);
                    if (f)
                    {


                        s = to_string(x[i]) + "*(" + s + ')';
                        cout << s << "\r\n";
                        break;

                    }
                }
                i++;
            }
            int t = x[j];
            
            if (f)
                break;
            else
            {
                x[j] = x[j + 2];
                x[j + 2] = t;
                j++;
            }
            
        }
        if(!f)
            std::cout << "尽力了\n";
        
    }
这篇关于编程实现24点游戏的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!