首页 > 其他分享 >24点求解器

24点求解器

时间:2024-04-16 22:45:37浏览次数:22  
标签:24 puts 求解 d% st Out

\(24\) 点求解器,输出任意一组解。

#include <bits/stdc++.h>
using namespace std;

#define to_st to_string
#define in push_back
typedef double db;
typedef string st;

vector<pair<db,st>>Number;
int A,B,C,D;
bool Out;

void Output(){Out=true;puts("Possble!");cout<<Number[0].second<<"=24\n";}
void DFS(int step);

void Add(db A,st AA){Number.clear();Number.in({A,AA});}
void Add(db A,db B,st AA,st BB){Number.clear();Number.in({A,AA});Number.in({B,BB});}
void Add(db A,db B,db C,st AA,st BB,st CC){Number.clear();Number.in({A,AA});Number.in({B,BB});Number.in({C,CC});}
void Add(db A,db B,db C,db D,st AA,st BB,st CC,st DD){Number.clear();Number.in({A,AA});Number.in({B,BB});Number.in({C,CC});Number.in({D,DD});}

st Text(st A,char c,st B){
    return '('+A+c+B+')';
}

void Calc(db A,db B,st AA,st BB){
    Add(A+B,Text(AA,'+',BB));DFS(1);
    Add(A-B,Text(AA,'-',BB));DFS(1);
    Add(A*B,Text(AA,'*',BB));DFS(1);
    if(B!=0){Add(A/B,Text(AA,'/',BB));DFS(1);}
}

void Calc(db A,db B,db C,st AA,st BB,st CC){
    Add(A+B,C,Text(AA,'+',BB),CC);DFS(2);
    Add(A-B,C,Text(AA,'-',BB),CC);DFS(2);
    Add(A*B,C,Text(AA,'*',BB),CC);DFS(2);
    if(B!=0){Add(A/B,C,Text(AA,'/',BB),CC);DFS(2);}
}

void Calc(db A,db B,db C,db D,st AA,st BB,st CC,st DD){
    Add(A+B,C,D,Text(AA,'+',BB),CC,DD);DFS(3);
    Add(A-B,C,D,Text(AA,'-',BB),CC,DD);DFS(3);
    Add(A*B,C,D,Text(AA,'*',BB),CC,DD);DFS(3);
    if(B!=0){Add(A/B,C,D,Text(AA,'/',BB),CC,DD);DFS(3);}
}

void DFS(int step){
    if(Out) return;
    if(step==1 and 23.9<Number[0].first and Number[0].first<24.1){
        Output();
    }else{
        if(step==2){
            db A=Number[0].first;
            db B=Number[1].first;
            st AA=Number[0].second;
            st BB=Number[1].second;
            Calc(A,B,AA,BB);
            Calc(B,A,BB,AA);
        }else if(step==3){
            db A=Number[0].first;
            db B=Number[1].first;
            db C=Number[2].first;
            st AA=Number[0].second;
            st BB=Number[1].second;
            st CC=Number[2].second;
            Calc(A,B,C,AA,BB,CC);Calc(A,C,B,AA,CC,BB);
            Calc(B,A,C,BB,AA,CC);Calc(B,C,A,BB,CC,AA);
            Calc(C,A,B,CC,AA,BB);Calc(C,B,A,CC,BB,AA);
        }else if(step==4){
            db A=Number[0].first;
            db B=Number[1].first;
            db C=Number[2].first;
            db D=Number[3].first;
            st AA=Number[0].second;
            st BB=Number[1].second;
            st CC=Number[2].second;
            st DD=Number[3].second;
            Calc(A,B,C,D,AA,BB,CC,DD);Calc(A,C,B,D,AA,CC,BB,DD);Calc(A,D,B,C,AA,DD,BB,CC);
            Calc(B,A,C,D,BB,AA,CC,DD);Calc(B,C,A,D,BB,CC,AA,DD);Calc(B,D,A,C,BB,DD,AA,CC);
            Calc(C,A,B,D,CC,AA,BB,DD);Calc(C,B,A,D,CC,BB,AA,DD);Calc(C,D,A,B,CC,DD,AA,BB);
            Calc(D,A,B,C,DD,AA,BB,CC);Calc(D,B,A,C,DD,BB,AA,CC);Calc(D,C,A,B,DD,CC,AA,BB);
        }
    }
}

void Main()
{
    srand(time(0));
    printf(">>> ");
    scanf("%d%d%d%d",&A,&B,&C,&D);
    Add(A,B,C,D,to_st(A),to_st(B),to_st(C),to_st(D));
    Out=false;
    DFS(4);
    if(!Out){
        puts("Impossble...QwQ");
    }puts("");
}

int main()
{
    while(true){
        Main();
    }
    return 0;
}

标签:24,puts,求解,d%,st,Out
From: https://www.cnblogs.com/Sundar-2022/p/18139450

相关文章

  • 2024/04/15!!!!!!!!!
    周末国九条、伊朗攻击以色列强度不及预期,国际黄金期货高位巨量放空、美国cpi和ppi不及预期,降息预期进一步降低等等一系列的消息,基本上都对中润资源不利但是国九条中关于分红和退市的规定,对市场的影响最大,我知道国九条对小盘股和垃圾股的不利,对白马股利好,但是没有想到影响来的如此......
  • 20240413
    T1TopcoderSRM567div1Medium-StringGame首先字母表定了之后两个人一定都会把字符串按字母表排序。对于这样的两个字符串,只需要数出两个串中每种字母分别有多少个,然后对着计数数组按字母表顺序比过去,在第一个不一样处更大的字典序小。因此先数一数每个字符串中每个字符出现......
  • 20240412
    T1洛谷P9923Przyciski对于每个\(\texttt{1}\),将其所在行与列连边。最终构成的图显然是二分图。我们希望能在图中选出若干条边,使得原图的点集和选出的边构成的图中每个点度数的奇偶性都相同。以下将度数为奇数的称为奇数解,度数为偶数的称为偶数解。首先如果图中存在环,则一定存......
  • PR2024教程-1 pr学习指南
    教程地址:【PR教程+视听语言+剪辑思维】比付费课程还强十倍,从零开始学视频剪辑(2024最新新手入门实用版)B站up主:塞班教剪辑配套素材:伊梦老师素材教程特点:细教程结构:基础篇(主要是软件界面的了解基础操作和常用的概念的理解)工具篇(常用工具的介绍和对应的使用例子)......
  • 游游的元素修改(携程24秋招研发岗第一批)
    题面游游的元素修改游游拿到了一个数组,她每次操作可以使得一个元素加1,另一个元素减1。游游希望最终数组的每个元素大小都在[l,r]范围内,她想知道自己最少多少次操作可以达成目标?输入第一行输入一个正整数t,代表用例的组数。对于每组用例:第一行输入三个正整数n,l,r。第二行输......
  • 游游的you矩阵(携程24秋招研发岗第一批)
    题面游游拿到了一个字符矩阵,她想知道有多少个三角形满足以下条件:三角形的三个顶点分别是y、o、u字符。三角形为直角三角形,且两个直角边一个为水平、另一个为垂直。输入第一行输入两个正整数n,m,用空格隔开,代表矩阵的行数和列数。接下来的n行,每行输入一个长度为m的字......
  • 2024-04-16 闲话
    今天因为https://mp.weixin.qq.com/s/vEcWmJCA8GP9h311viSJwQ被很多人辱骂了。然后简单思考了一下如何回应这种问候,然后自然想到了从https://m.cyol.com/gb/articles/2023-04/20/content_X5eNg6HpYg.html入手使用格林公式解决。具体格林公式如下:......
  • 【2024蓝桥B组】好数
    好数题目 题目分析1.蓝桥杯不怕麻烦的,一般可以选择用longlongint替换int,防止数据过大2.这道题不怕麻烦的话,可以直接暴力解,用多个if语句进行判断即可3.想要美观点的,就进行数位判断4.这道题就一个关键点:奇数位对奇数,偶数位对偶数代码1#include<iostream>usingname......
  • 【专题】中国纯电新能源汽车-市场发展和用车报告2024年报告合集PDF分享(附原数据表)
    原文链接:https://tecdat.cn/?p=35878原文出处:拓端数据部落公众号2023年,纯电车型在新能源市场中占据高达七成的市场份额,尽管技术挑战仍然存在。插混及增程车型在续航里程和驾驶体验上取得显著进步,但纯电车型仍占据主导地位。预计未来几年,插混及增程车型市场份额将持续攀升,为市场......
  • Ubuntu 24.04 LTS (Noble Numbat) 下载
    Ubuntu24.04LTS(NobleNumbat)下载Ubuntu24.04LTS开启Beta测试,正式版即将发布请访问原文链接:Ubuntu24.04LTS(NobleNumbat),查看最新版。原创作品,转载请保留出处。作者主页:sysin.org无耻抄袭者YuTao,请立遁!!!Ubuntu24.04LTS首个Beta已发布。本次Beta测......