求助大佬 代码有点长
  • 板块P1236 算24点
  • 楼主tyy6034
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/10/13 21:20
  • 上次更新2023/11/2 14:02:58
查看原帖
求助大佬 代码有点长
917842
tyy6034楼主2023/10/13 21:20
#include<bits/stdc++.h>
using namespace std;
int a,b,c,d;
char last1,last2,last3;
bool flag;
int suan(int x,int y,char q)
{
    if(q=='+')return x+y;
    if(q=='-')
    {
        if(x>=y)return x-y;
        else 
        {
            return -1;
        }
    }
    if(q=='*')return x*y;
    if(q=='/')
    {
        if(x%y==0)return x/y;
        else
        {
            return -1;
        }
    }
}
void second(int x,int y,int z,int w)
{
    char l,o,p;
    for(int i=1;i<=4;i++)
    {
        for(int j=1;j<=4;j++)
        {
            for(int k=1;k<=4;k++)
            {
                if(i==1)l='+';
                if(i==2)l='-';
                if(i==3)l='*';
                if(i==4)l='/';
                
                if(j==1)o='+';
                if(j==2)o='-';
                if(j==3)o='*';
                if(j==4)o='/';
                
                if(k==1)p='+';
                if(k==2)p='-';
                if(k==3)p='*';
                if(k==4)p='/';
                
                int g=suan(x,y,l);
                int h=suan(g,z,o);
                int t=suan(h,w,p);
                if(g==-1||h==-1||t==-1)continue;
                if(t==24)
                {
                    last1=l;
                    last2=o;
                    last3=p;
                    flag=true;
                    return ;
                }
            }
        }
    }
}
void first(int x,int y,int z,int w)
{
    char l,o,p;
    for(int i=1;i<=4;i++)
    {
        for(int j=1;j<=4;j++)
        {
            for(int k=1;k<=4;k++)
            {
                if(i==1)l='+';
                if(i==2)l='-';
                if(i==3)l='*';
                if(i==4)l='/';
                
                if(j==1)o='+';
                if(j==2)o='-';
                if(j==3)o='*';
                if(j==4)o='/';
                
                if(k==1)p='+';
                if(k==2)p='-';
                if(k==3)p='*';
                if(k==4)p='/';
                
                int g=suan(x,y,l);
                int h=suan(z,w,p);
                if(g==-1||h==-1||suan(g,h,o)==-1)continue;
                if(suan(g,h,o)==24)
                {
                    last1=l;
                    last2=o;
                    last3=p;
                    flag=false;
                    return ;
                }
            }
        }
    }
}
void f(int x,int y,int z,int w)
{
    first(x,y,z,w);
    second(x,y,z,w);
}
int main()
{
    cin>>a>>b>>c>>d;
    f(a,b,c,d);
    f(a,b,d,c);
    f(a,c,b,d);
    f(a,c,d,b);
    f(a,d,c,b);
    f(a,d,b,c);
    
    f(b,a,c,d);
    f(b,a,d,c);
    f(c,a,b,d);
    f(c,a,d,b);
    f(d,a,c,b);
    f(d,a,b,c);
    
    f(b,c,a,d);
    f(b,d,a,c);
    f(c,b,a,d);
    f(c,d,a,b);
    f(d,b,a,c);
    f(d,c,a,b);
    
    f(b,c,d,a);
    f(b,d,c,a);
    f(c,b,d,a);
    f(c,d,b,a);
    f(d,c,b,a);
    f(d,b,c,a);
    //枚举
    
    if(int(last1)==0||int(last2)==0||int(last3)==0)cout<<"No answer!"<<endl;
    else
    {
        if(flag==false)
        {
            int e=suan(a,b,last1);
            int f=suan(c,d,last3);
            cout<<a<<last1<<b<<'='<<e<<endl;
            cout<<c<<last3<<d<<'='<<f<<endl;
            cout<<e<<last2<<f<<'='<<suan(e,f,last2)<<endl;
        }
        else
        {
            int e=suan(a,b,last1);
            int f=suan(e,c,last2);
            int g=suan(f,d,last3);
            cout<<a<<last1<<b<<'='<<e<<endl;
            cout<<e<<last2<<c<<'='<<f<<endl;
            cout<<f<<last3<<d<<'='<<g<<endl;
        }
    }
    return 0;
}
2023/10/13 21:20
加载中...