24点计算公式大全

速算24点相信绝大多数人都玩过就是随机给你四张牌,包括 A(1),2,3,4,5,6,7,8,9,10,J(11),Q(12),K(13)要求只用' ','-','*','/'运算符以及括号改变运算 顺序,使得最终运算结果为24(每个数必须且仅能用一次)游戏很简单,但遇到无解的情况往往让人很郁闷你的任务就是针对每一组随机产生的四张牌,判断 是否有解我们另外规定,整个计算过程中都不能出现小数,现在小编就来说说关于24点计算公式大全?下面内容希望能帮助到你,我们来一起看看吧!

24点计算公式大全

ICPC–1219: 速算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;
}

ICPC–1220: SO EASY,

举报
评论(0)
游客的头像
表情
全部评论 只看作者
最新热门
  1. 暂时还没有评论哦