社区讨论

悬赏,80分,求调。

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

讨论操作

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

当前回复
0 条
当前快照
1 份
快照标识符
@m5ywdvbl
此快照首次捕获于
2025/01/16 13:36
去年
此快照最后确认于
2025/01/16 14:35
去年
查看原帖
CPP
#include<bits/stdc++.h>
using namespace std;
vector<int> nums(4);
bool solve(vector<int>& nums, int target){
    for(int i=0;i<4;i++){
        for(int j=0;j<4;j++){
            if(i!=j){
                for(int k=0;k<4;k++){
                    if(k!=i && k!=j) {
                        for(int l=0;l<4;l++){
                            if(l!=i && l!=j && l!=k){
                                vector<int> order={nums[i], nums[j], nums[k], nums[l]};
                                for(int op1=0;op1<4;op1++){
                                    for(int op2=0;op2<4;op2++){
                                        for(int op3=0;op3<4;op3++){
                                            int res1, res2, res3;
                                            switch(op1){
                                                case 0:res1=order[0]+order[1]; break;
                                                case 1:res1=order[0]-order[1]; break;
                                                case 2:res1=order[0]*order[1]; break;
                                                case 3:if(order[1]!=0 && order[0]%order[1]==0) res1=order[0]/order[1]; else continue;
                                            }
                                            switch(op2){
                                                case 0:res2=res1+order[2]; break;
                                                case 1:res2=res1-order[2]; break;
                                                case 2:res2=res1*order[2]; break;
                                                case 3:if(order[2]!=0 && res1%order[2]==0) res2=res1/order[2]; else continue;
                                            }
                                            switch(op3){
                                                case 0:res3=res2+order[3]; break;
                                                case 1:res3=res2-order[3]; break;
                                                case 2:res3=res2*order[3]; break;
                                                case 3:if(order[3]!=0 && res2%order[3]==0) res3=res2/order[3]; else continue;
                                            }
                                            if(res3==target){
                                                if(order[0]>=order[1]){
                                                    cout<<order[0];
                                                    switch(op1){
                                                        case 0:cout<<"+"; break;
                                                        case 1:cout<<"-"; break;
                                                        case 2:cout<<"*"; break;
                                                        case 3:cout<<"/"; break;
                                                    }
                                                    cout<<order[1]<<"="<<res1<<endl;
                                                }else{
                                                    cout<<order[1];
                                                    switch(op1){
                                                        case 0:cout<<"+"; break;
                                                        case 1:cout<<"-"; break;
                                                        case 2:cout<<"*"; break;
                                                        case 3:cout<<"/"; break;
                                                    }
                                                    cout<<order[0]<<"="<<res1<<endl;
                                                }
                                                if(res1>=order[2]){
                                                    cout<<res1;
                                                    switch(op2){
                                                        case 0:cout<<"+"; break;
                                                        case 1:cout<<"-"; break;
                                                        case 2:cout<<"*"; break;
                                                        case 3:cout<<"/"; break;
                                                    }
                                                    cout<<order[2]<<"="<<res2<<endl;
                                                }else{
                                                    cout<<order[2];
                                                    switch(op2){
                                                        case 0:cout<<"+"; break;
                                                        case 1:cout<<"-"; break;
                                                        case 2:cout<<"*"; break;
                                                        case 3:cout<<"/"; break;
                                                    }
                                                    cout<<res1<<"="<<res2<<endl;
                                                }
                                                if(res2>=order[3]){
                                                    cout<<res2;
                                                    switch(op3){
                                                        case 0:cout<<"+"; break;
                                                        case 1:cout<<"-"; break;
                                                        case 2:cout<<"*"; break;
                                                        case 3:cout<<"/"; break;
                                                    }
                                                    cout<<order[3]<<"=24"<<endl;
                                                }else{
                                                    cout<<order[3];
                                                    switch(op3){
                                                        case 0:cout<<"+"; break;
                                                        case 1:cout<<"-"; break;
                                                        case 2:cout<<"*"; break;
                                                        case 3:cout<<"/"; break;
                                                    }
                                                    cout<<res2<<"=24"<<endl;
                                                }
                                                return true;
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
    return false;
}

int main() {
    for(int i=0;i<4;i++)
        cin>>nums[i];
    if(!solve(nums, 24)) 
        cout<<"No answer!"<<endl;
    return 0;
}

回复

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

正在加载回复...