社区讨论

90分求调

P1236算24点参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@mi0ve23p
此快照首次捕获于
2025/11/16 06:40
4 个月前
此快照最后确认于
2025/11/17 09:13
4 个月前
查看原帖
CPP
#include<bits/stdc++.h>
using namespace std;

const int N=1e6+50;
int a[10];
int v[10];
int ans[N][10];
int f;
char mp[]={'+','-','*','/'};

void print(){
    for(int i=1;i<=3;i++){
        int l=ans[i][1];
        int r=ans[i][3];
        int op=ans[i][2];
        if(op!=1&&op!=3&&l<r){
            swap(l,r);
        }
        cout<<l<<mp[op]<<r<<"="<<ans[i][4]<<endl;
    }
}

void dfs(int num,int u){
    if(u==3&&num==24){
        print();
        f=1;
        return;
    }
    if(u>=3||f){
        return;
    }
    for(int i=0;i<4;i++){
        if(!v[i]){
            v[i]=true;
            ans[u+1][3]=a[i];
            ans[u+1][1]=num;
            ans[u+1][2]=0;
            ans[u+1][4]=num+a[i];
            dfs(num+a[i],u+1);
            if(num>a[i]){
                ans[u+1][1]=num;
                ans[u+1][2]=1;
                ans[u+1][4]=num-a[i];
                dfs(num-a[i],u+1);
                if(f)return;
            }
            ans[u+1][1]=num;
            ans[u+1][2]=2;
            ans[u+1][4]=num*a[i];
            dfs(num*a[i],u+1);
            if(a[i]!=0&&num%a[i]==0){
                int res=num/a[i];
                if(res>0){
                    ans[u+1][1]=num;
                    ans[u+1][2]=3;
                    ans[u+1][4]=res;
                    dfs(res,u+1);
                }
            }
            v[i]=false;
        }
    }
}

int main(){
    for(int i=0;i<4;i++){
        cin>>a[i];
    }
    for(int i=0;i<4;i++){
        f=0;
        memset(v,false,sizeof v);
        v[i]=true;
        dfs(a[i],0);
        if(f){
            return 0;
        }
    }
    cout<<"No answer!";
    return 0;
}

回复

0 条回复,欢迎继续交流。

正在加载回复...