题解 | #24点运算#
24点运算
https://www.nowcoder.com/practice/7e124483271e4c979a82eb2956544f9d
#include <iostream>
#include <map>
#include <vector>
#include <algorithm>
using namespace std;
//card to num
map<string, int> c2n = {
{"3", 3},
{"4", 4},
{"5", 5},
{"6", 6},
{"7", 7},
{"8", 8},
{"9", 9},
{"10", 10},
{"J", 11},
{"Q", 12},
{"K", 13},
{"A", 1},
{"2", 2},
{"joker", 16},
{"JOKER", 17}
};
//number to card
map<int, string> n2c = {
{3, "3"},
{4, "4"},
{5, "5"},
{6, "6"},
{7, "7"},
{8, "8"},
{9, "9"},
{10, "10"},
{11, "J"},
{12, "Q"},
{13, "K"},
{1, "A"},
{2, "2"},
{16, "joker"},
{17, "JOKER"}
};
int calc2(int a, int b, char op)
{
switch (op)
{
case '+':
return a + b;
case '-':
return a - b;
case '*':
return a * b;
case '/':
return a / b;
default:
break;
}
return -9999;
}
void calc24(vector<int> vcard)
{
char op[4] = { '+', '-', '*', '/' };
int sum1, sum2, sum3;
do
{
for (int i = 0; i < 4; i++)
{
sum1 = calc2(vcard[0], vcard[1], op[i]);
for (int j = 0; j < 4; j++)
{
sum2 = calc2(sum1, vcard[2], op[j]);
for (int k = 0; k < 4; k++)
{
sum3 = calc2(sum2, vcard[3], op[k]);
if (sum3 == 24)
{
cout << n2c[vcard[0]] << op[i] << n2c[vcard[1]] << op[j]
<< n2c[vcard[2]] << op[k] << n2c[vcard[3]] << endl;
return;
}
}
}
}
} while (next_permutation(vcard.begin(), vcard.end()));
cout << "NONE" << endl;
}
int main()
{
vector<int> vcard;
int flag = 0;
for (int i = 0; i < 4; i++)
{
string tmp;
cin >> tmp;
if (tmp == "joker" || tmp == "JOKER")
{
flag = 1;
}
vcard.push_back(c2n[tmp]);
}
if (flag == 1)
{
cout << "ERROR" << endl;
}
calc24(vcard);
return 0;
}