24點運算

#include<iostream>
#include<string>
#include<map>
using namespace std;

map<string, int> poker;
int strToInt(string s);
void judge(int a, int b, int c, int d);
int cal(int a, int b, int c, int d, int i, int j, int k);
string output;
int main(){
    string input;
    string a, b, c, d;
    int A, B , C, D;
    cin>>a>>b>>c>>d;
    if(a == "joker" || a == "JOKER"){cout<<"ERROR"; return 0;}
    if(b == "joker" || b == "JOKER"){cout<<"ERROR"; return 0;}
    if(c == "joker" || c == "JOKER"){cout<<"ERROR"; return 0;}
    if(d == "joker" || d == "JOKER"){cout<<"ERROR"; return 0;}
    poker["J"] = 11; poker["Q"] = 12; poker["K"] = 13; poker["A"] = 14; poker["2"] = 2;
    /*
    cout<<a<<b<<c<<d<<endl;
    cout<<strToInt(a)<<endl;
    cout<<strToInt(b)<<endl;
    cout<<strToInt(c)<<endl;
    cout<<strToInt(d)<<endl;
    */
    A = strToInt(a); B = strToInt(b); C = strToInt(c); D = strToInt(d);
    judge(A, B, C, D);
    return 0;
}

int strToInt(string s){
    if(s >= "3" && s <= "9") return s[0] - '0';
    else if(s == "10") return 10;
    else return poker[s];
}

void judge(int a, int b, int c, int d){
    char arr[4] = {'+', '-', '*', '/'};
    int aa, bb, cc, dd;
    int flag = 0;
    int breakFlag = 0;
    for(int i = 0; i < 4; i++){
        for(int j = 0; j < 4; j++){
            for(int k = 0; k < 4; k++){
                if(cal(a,b,c,d,i,j,k)==24) {flag = 1; aa = a; bb = b; cc = c; dd = d;}
				if(cal(a,b,d,c,i,j,k)==24) {flag = 1; aa = a; bb = b; cc = d; dd = c;}
				if(cal(a,c,b,d,i,j,k)==24) {flag = 1; aa = a; bb = c; cc = b; dd = d;}
				if(cal(a,c,d,b,i,j,k)==24) {flag = 1; aa = a; bb = c; cc = d; dd = b;}
				if(cal(a,d,b,c,i,j,k)==24) {flag = 1; aa = a; bb = d; cc = b; dd = c;}
				if(cal(a,d,c,b,i,j,k)==24) {flag = 1; aa = a; bb = d; cc = c; dd = b;}
				if(cal(b,a,c,d,i,j,k)==24) {flag = 1; aa = b; bb = a; cc = c; dd = d;}
				if(cal(b,a,d,c,i,j,k)==24) {flag = 1; aa = b; bb = a; cc = d; dd = c;}
				if(cal(b,c,a,d,i,j,k)==24) {flag = 1; aa = b; bb = c; cc = a; dd = d;}
				if(cal(b,c,d,a,i,j,k)==24) {flag = 1; aa = b; bb = c; cc = d; dd = a;}
				if(cal(b,d,a,c,i,j,k)==24) {flag = 1; aa = b; bb = d; cc = a; dd = c;}
				if(cal(b,d,c,a,i,j,k)==24) {flag = 1; aa = b; bb = d; cc = c; dd = a;}
				if(cal(c,a,b,d,i,j,k)==24) {flag = 1; aa = c; bb = a; cc = b; dd = d;}
				if(cal(c,a,d,b,i,j,k)==24) {flag = 1; aa = c; bb = a; cc = d; dd = b;}
				if(cal(c,b,a,d,i,j,k)==24) {flag = 1; aa = c; bb = b; cc = a; dd = d;}
				if(cal(c,b,d,a,i,j,k)==24) {flag = 1; aa = c; bb = b; cc = d; dd = a;}
				if(cal(c,d,a,b,i,j,k)==24) {flag = 1; aa = c; bb = d; cc = a; dd = b;}
				if(cal(c,d,b,a,i,j,k)==24) {flag = 1; aa = c; bb = d; cc = b; dd = a;}
				if(cal(d,a,b,c,i,j,k)==24) {flag = 1; aa = d; bb = a; cc = b; dd = c;}
				if(cal(d,a,c,b,i,j,k)==24) {flag = 1; aa = d; bb = a; cc = c; dd = b;}
				if(cal(d,b,a,c,i,j,k)==24) {flag = 1; aa = d; bb = b; cc = a; dd = c;}
				if(cal(d,b,c,a,i,j,k)==24) {flag = 1; aa = d; bb = b; cc = c; dd = a;}
				if(cal(d,c,a,b,i,j,k)==24) {flag = 1; aa = d; bb = c; cc = a; dd = b;}
				if(cal(d,c,b,a,i,j,k)==24) {flag = 1; aa = d; bb = c; cc = b; dd = a;}

				if(flag == 1){
                    cout<<aa<<arr[i]<<bb<<arr[j]<<cc<<arr[k]<<dd<<endl;
                    breakFlag = 1;
                    break;
				}
				if(breakFlag == 1) break;
            }
            if(breakFlag == 1) break;
        }
        if(breakFlag == 1) break;
    }
    if(flag == 0){
        cout<<"NONE"<<endl;
    }

}

int cal(int a, int b, int c, int d, int i, int j, int k){
    int sum = 0;
    if(i == 0) sum = a + b;
    else if(i == 1) sum = a - b;
    else if(i == 2) sum = a * b;
    else if(i == 3) sum = a/b;

    if(j == 0) sum = sum + c;
    else if(j == 1) sum-=c;
    else if(j == 2) sum*=c;
    else if(j == 3) sum/=c;

    if(k == 0) sum+=d;
    else if(k == 1) sum-=d;
    else if(k == 2) sum*=d;
    else if(k == 3) sum/=d;

    return sum;

}
#include<iostream>
#include<string>
#include<algorithm>
#include<map>
using namespace std;


map<string, int> poker;
int strToInt(string s);
void judge(int a, int b, int c, int d);
int cal(int a, int b, int c, int d, int i, int j, int k);
string output;
int main(){
    string input;
    string a, b, c, d;
    int A, B , C, D;
    cin>>a>>b>>c>>d;
    if(a == "joker" || a == "JOKER"){cout<<"ERROR"; return 0;}
    if(b == "joker" || b == "JOKER"){cout<<"ERROR"; return 0;}
    if(c == "joker" || c == "JOKER"){cout<<"ERROR"; return 0;}
    if(d == "joker" || d == "JOKER"){cout<<"ERROR"; return 0;}
    poker["J"] = 11; poker["Q"] = 12; poker["K"] = 13; poker["A"] = 14; poker["2"] = 2;
    /*
    cout<<a<<b<<c<<d<<endl;
    cout<<strToInt(a)<<endl;
    cout<<strToInt(b)<<endl;
    cout<<strToInt(c)<<endl;
    cout<<strToInt(d)<<endl;
    */
    A = strToInt(a); B = strToInt(b); C = strToInt(c); D = strToInt(d);
    judge(A, B, C, D);
    return 0;
}


int strToInt(string s){
    if(s >= "3" && s <= "9") return s[0] - '0';
    else if(s == "10") return 10;
    else return poker[s];
}


void judge(int a, int b, int c, int d){
    char arr[4] = {'+', '-', '*', '/'};
    int num[4] = {a, b, c, d};
    int aa, bb, cc, dd;
    int flag = 0;
    int breakFlag = 0;
    for(int i = 0; i < 4; i++){
        for(int j = 0; j < 4; j++){
            for(int k = 0; k < 4; k++){


                if(cal(num[0], num[1], num[2], num[3], i, j, k) == 24){
                            flag = 1;
                            aa = num[0]; bb = num[1]; cc = num[2]; dd = num[3];
                    }
                if(flag == 1){
                    cout<<aa<<arr[i]<<bb<<arr[j]<<cc<<arr[k]<<dd<<endl;
                    breakFlag = 1;
                    break;
<span style="white-space:pre">				</span>}
<span style="white-space:pre">				</span>// 例如輸入 4 4 4 4,這個while循環就進不來, 所以前面那個判斷輸入運算結果是否滿足24點的是必須的!!!
                sort(num, num+4);
                while(next_permutation(num, num+4)){
                    if(cal(num[0], num[1], num[2], num[3], i, j, k) == 24){
                            flag = 1;
                            aa = num[0]; bb = num[1]; cc = num[2]; dd = num[3];
                    }
                }
<span style="white-space:pre">				</span>if(flag == 1){
                    cout<<aa<<arr[i]<<bb<<arr[j]<<cc<<arr[k]<<dd<<endl;
                    breakFlag = 1;
                    break;
<span style="white-space:pre">				</span>}
<span style="white-space:pre">				</span>if(breakFlag == 1) break;
            }
            if(breakFlag == 1) break;
        }
        if(breakFlag == 1) break;
    }
    if(flag == 0){
        cout<<"NONE"<<endl;
    }


}


int cal(int a, int b, int c, int d, int i, int j, int k){
    int sum = 0;
    if(i == 0) sum = a + b;
    else if(i == 1) sum = a - b;
    else if(i == 2) sum = a * b;
    else if(i == 3) sum = a/b;


    if(j == 0) sum = sum + c;
    else if(j == 1) sum-=c;
    else if(j == 2) sum*=c;
    else if(j == 3) sum/=c;


    if(k == 0) sum+=d;
    else if(k == 1) sum-=d;
    else if(k == 2) sum*=d;
    else if(k == 3) sum/=d;


    return sum;


}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章