社区讨论

请问各位大佬我的代码怎么错的

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

讨论操作

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

当前回复
2 条
当前快照
1 份
快照标识符
@lo38enqz
此快照首次捕获于
2023/10/24 02:29
2 年前
此快照最后确认于
2023/10/24 02:29
2 年前
查看原帖
CPP
#include<bits/stdc++.h>
using namespace std;
int a[5],sb=0;
bool flag=0;
string s[4];
void print(){
    for(int i=1;i<=3;i++) printf("%s\n",s[i].c_str());
}
void dfs(int len,int top){
    if(len==top){
        if(a[top]==24){
            print();
            flag=1;
            return ;
        }
    }
    for(int i=top;i<len;i++){
        int aa=a[i]+a[i+1],qq=a[i+1];
        int snm=max(a[i],a[i+1]),cnm=min(a[i],a[i+1]);
        s[++sb]=(snm+'0')+'+'+(cnm+'0')+'='+(aa+'0');
        a[i+1]=aa;
        dfs(len,top+1);
        if(flag) return ;
        a[i+1]=qq;
        aa=a[i]-a[i+1];
        s[sb]=(a[i]+'0')+'-'+(a[i+1]+'0')+'='+(aa+'0');
        a[i+1]=aa;
        dfs(len,top+1);
        if(flag) return ;
        a[i+1]=qq;
        aa=a[i]*a[i+1];
        s[sb]=(snm+'0')+'*'+(cnm+'0')+'='+(aa+'0');
        a[i+1]=aa;
        dfs(len,top+1);
        if(flag) return ;
        a[i+1]=qq;
        aa=a[i]/a[i+1];
        if(aa*a[i+1]!=a[i]) continue;
        s[sb]=(a[i]+'0')+'/'+(a[i+1]+'0')+'='+(aa+'0');
        a[i+1]=aa;
        dfs(len,top+1);
        if(flag) return ;
        a[i+1]=qq;
    }
}
int main(){
    scanf("%d%d%d%d",&a[1],&a[2],&a[3],&a[4]);
    dfs(4,1);
    if(!flag)printf("No answer!");
    return 0;
}

回复

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

正在加载回复...