您的位置:首页 > 其它

hiho 98 搜索一 24点

2016-05-21 13:25 246 查看

问题

给定四个数, 使用加减乘除四中操作, 得到24, 每个数只能使用一次。

解法

暴力枚举法,

http://hihocoder.com/contest/hiho98/problem/1#

#include <bits/stdc++.h>
using namespace std;
int a[4];
enum{add=0, sub, mul, divid, rsub, rdiv, OPNUM};
int operators[3];
const double ESP = 1e-5;
double Op(double a, double b, int opID)
{
switch(operators[opID]){
case add:
return a+b;
case sub:
return a-b;
case mul:
return a*b;
case divid:
return a/b;
case rsub:
return b-a;
case rdiv:
return b/a;
}
}

bool test()
{
return abs(Op(Op(Op(a[0], a[1], 0), a[2], 1), a[3], 2)-24.0) < ESP ||
abs(Op(Op(a[0], a[1], 0), Op(a[2], a[3], 2), 1) - 24.0) < ESP;
}

bool result()
{
do{
for (int i=0; i< 6*6*6; ++i){
int a = i;
operators[0] = a%6;
a/= 6;
operators[1] = a%6;
a/= 6;
operators[2] = a%6;
if (test())
return true;
}
}while(next_permutation(a, a+4));
return false;
}
int main()
{
int t;
scanf("%d", &t);
while(t--){
scanf("%d %d %d %d", a, a+1, a+2, a+3);
sort(a, a+4);
memset(operators, 0, sizeof(operators));
printf("%s\n", result()? "Yes":"No");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: