24點計算公式大全?速算24點相信絕大多數人都玩過就是随機給你四張牌,包括 A(1),2,3,4,5,6,7,8,9,10,J(11),Q(12),K(13)要求隻用' ','-','*','/'運算符以及括号改變運算 順序,使得最終運算結果為24(每個數必須且僅能用一次)遊戲很簡單,但遇到無解的情況往往讓人很郁悶你的任務就是針對每一組随機産生的四張牌,判斷 是否有解我們另外規定,整個計算過程中都不能出現小數,現在小編就來說說關于24點計算公式大全?下面内容希望能幫助到你,我們來一起看看吧!
速算24點相信絕大多數人都玩過。就是随機給你四張牌,包括 A(1),2,3,4,5,6,7,8,9,10,J(11),Q(12),K(13)。要求隻用' ','-','*','/'運算符以及括号改變運算 順序,使得最終運算結果為24(每個數必須且僅能用一次)。遊戲很簡單,但遇到無解的情況往往讓人很郁悶。你的任務就是針對每一組随機産生的四張牌,判斷 是否有解。我們另外規定,整個計算過程中都不能出現小數。
輸入輸入數據占一行,給定四張牌。
輸出如果有解則輸出"Y",無解則輸出"N"。
樣例輸入
A 2 3 6
Y
#include<bits/stdc .h>
using namespace std;
int a[10]; // 輸入的數字
int num[10];
int flag = 0;
int get_num(string s)
{
if (s.size() == 2)
return 10;
if (s <= "9" && s >= "0")
return s[0] - '0';
else
if (s == "J")
return 11;
else
if (s == "Q")
return 12;
else
if (s == "K")
return 13;
else
if (s == "A")
return 1;
}
void dfs(int num, int d)
{
if (flag == 1)
return;
if (d == 3)
{
if (num == 24)
flag = 1;
return;
}
else
{
for (int i = 1; i <= 7; i )
{
if (i == 1)
dfs(num a[d 1], d 1);
if (i == 2)
dfs(num - a[d 1], d 1);
if (i == 3)
dfs(num * a[d 1], d 1);
if (a[d 1] != 0 && i == 4 && num % a[d 1] == 0)
dfs(num / a[d 1], d 1);
if (i == 5)
dfs(a[d 1] - num, d 1);
if (i == 6)
dfs(a[d 1] - num, d 1);
if (i == 7 && num != 0 && a[d 1] % num == 0)
dfs(a[d 1] / num, d 1);
}
}
return;
}
void check_two()
{
num[1] = a[0] a[1], num[2] = a[0] - a[1], num[3] = a[0] * a[1];
if (a[0] % a[1] != 0)
num[4] = -1000;
else
num[4] = a[0] / a[1];
num[5] = a[2] a[3], num[6] = a[2] - a[3], num[7] = a[2] * a[3];
if (a[2] % a[3] != 0)
num[8] = -1000;
else
num[8] = a[2] / a[3];
for (int i = 1; i <= 4; i )
{
for (int j = 5; j <= 8; j )
{
if (i == j || a[i] == -1000 || a[j] == -1000)
continue;
for (int k = 1; k <= 4; k )
{
int num1 = 0;
if (k == 1)
num1 = num[i] num[j];
if (k == 2)
num1 = num[i] - num[j];
if (k == 3)
num1 = num[i] * num[j];
if (k == 4)
{
if (num[j] != 0 && num[i] % num[j] == 0)
num1 = num[i] / num[j];
else
num1 = -1000;
}
if (num1 == 24)
{
flag = 1;
return;
}
}
}
}
flag = 0;
return;
}
int main(){
string s;
int cnt = 0;
for (int i = 1; i <= 4; i )
{
cin >> s;
a[cnt ] = get_num(s);
}
sort(a, a cnt);
do
{
flag = 0;
dfs(a[0], 0);
if (flag != 1)
check_two();
if (flag == 1)
{
cout << "Y" << endl;
return 0;
}
} while (next_permutation(a, a cnt));
cout << "N" << endl;
return 0;
}
更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!