1261 二十四点游戏

 
描述

算二十四点是个很好玩的扑克牌游戏,给4张的A-K的扑克牌,分别代表1-13,随意组合这四张牌,只使用 "+ - * /" 的四则运算,不使用其他运符和括号。 请判断给定的四张牌是否可以算出二十四点。

输入

第一行为整数n,表示下面有n组数据。 每组数据一行,分别为四个用空格隔开的整数,表示四张扑克牌。

输出

对于每组数据,输出一行,如果可以算出二十四点,输出"Yes.",否则输出"No."。

样例输入
2
2 11 1 1
1 1 1 1
样例输出
Yes.
No.

 

此题可以用很恶心的方法来做,例如下面的代码,double类型判断相等不一定是0,只要在一个范围之内即可,这是要注意的地方

#include<iostream>
using namespace std;
int i,j,k,l,n,o,m,t;
double p[10];
void did(double a,double b,double c,double d)
{
    // cout<<a<<" "<<b<<" "<<c<<" "<<d<<endl;
     if(a+b+c+d-24<0.0001&&a+b+c+d-24>-0.0001)t=1;
     if(a+b+c-d-24<0.0001&&a+b+c-d-24>-0.0001)t=1;
     if(a+b-c+d-24<0.0001&&a+b-c+d-24>-0.0001)t=1;
     if(a+b-c-d-24<0.0001&&a+b-c-d-24>-0.0001)t=1;
     if(a-b+c+d-24<0.0001&&a-b+c+d-24>-0.0001)t=1;
     if(a-b+c-d-24<0.0001&&a-b+c-d-24>-0.0001)t=1;
     if(a-b-c-d-24<0.0001&&a-b-c-d-24>-0.0001)t=1;
     if(a+b+c*d-24<0.0001&&a+b+c*d-24>-0.0001)t=1;
     if(a+b-c*d-24<0.0001&&a+b-c*d-24>-0.0001)t=1;
     if(a-b+c*d-24<0.0001&&a-b+c*d-24>-0.0001)t=1;
     if(a-b-c*d-24<0.0001&&a-b-c*d-24>-0.0001)t=1;
     if(a+b*c+d-24<0.0001&&a+b*c+d-24>-0.0001)t=1;
     if(a+b*c-d-24<0.0001&&a+b*c-d-24>-0.0001)t=1;
     if(a-b*c+d-24<0.0001&&a-b*c+d-24>-0.0001)t=1;
     if(a-b*c-d-24<0.0001&&a-b*c-d-24>-0.0001)t=1;
     if(a*b-c-d-24<0.0001&&a*b-c-d-24>-0.0001)t=1;
     if(a*b+c-d-24<0.0001&&a*b+c-d-24>-0.0001)t=1;
     if(a*b-c+d-24<0.0001&&a*b-c+d-24>-0.0001)t=1;
     if(a*b+c+d-24<0.0001&&a*b+c+d-24>-0.0001)t=1;
     if(a*b*c-d-24<0.0001&&a*b*c-d-24>-0.0001)t=1;
     if(a*b*c+d-24<0.0001&&a*b*c+d-24>-0.0001)t=1;
     if(a+b*c*d-24<0.0001&&a+b*c*d-24>-0.0001)t=1;
     if(a-b*c*d-24<0.0001&&a-b*c*d-24>-0.0001)t=1;
     if(a*b-c*d-24<0.0001&&a*b-c*d-24>-0.0001)t=1;
     if(a*b+c*d-24<0.0001&&a*b+c*d-24>-0.0001)t=1;

             if(a+b+c/d-24<0.0001&&a+b+c/d-24>-0.0001)t=1;
             if(a+b-c/d-24<0.0001&&a+b-c/d-24>-0.0001)t=1;
             if(a+b+c/d-24<0.0001)
             if(a-b-c/d-24<0.0001&&a-b-c/d-24>-0.0001)t=1;
             if(a*b+c/d-24<0.0001&&a*b+c/d-24>-0.0001)t=1;
             if(a*b-c/d-24<0.0001&&a*b-c/d-24>-0.0001)t=1;
             if(a+b*c/d-24<0.0001&&a+b*c/d-24>-0.0001)t=1;
             if(a-b*c/d-24<0.0001&&a-b*c/d-24>-0.0001)t=1;
             if(a*b*c/d-24<0.0001&&a*b*c/d-24>-0.0001)t=1;
             
             if(a+b/c+d-24<0.0001&&a+b/c+d-24>-0.0001)t=1;
             if(a+b/c-d-24<0.0001&&a+b/c-d-24>-0.0001)t=1;
             if(a-b/c-d-24<0.0001&&a-b/c-d-24>-0.0001)t=1;
             if(a+b/c*d-24<0.0001&&a+b/c*d-24>-0.0001)t=1;
             if(a-b/c*d-24<0.0001&&a-b/c*d-24>-0.0001)t=1;
             if(a*b/c-d-24<0.0001&&a*b/c-d-24>-0.0001)t=1;
             if(a*b/c+d-24<0.0001&&a*b/c+d-24>-0.0001)t=1;
             if(a+b/c*d-24<0.0001&&a+b/c*d-24>-0.0001)t=1;
             if(a*b/c*d-24<0.0001&&a*b/c*d-24>-0.0001)t=1;
             
             if(a/b+c+d-24<0.0001&&a/b+c+d-24>-0.0001)t=1;
             if(a/b+c-d-24<0.0001&&a/b+c-d-24>-0.0001)t=1;
             if(a/b-c+d-24<0.0001&&a/b-c+d-24>-0.0001)t=1;
             if(a/b-c-d-24<0.0001&&a/b-c-d-24>-0.0001)t=1;
             if(a/b+c*d-24<0.0001&&a/b+c*d-24>-0.0001)t=1;
             if(a/b-c*d-24<0.0001&&a/b-c*d-24>-0.0001)t=1;
             if(a/b*c+d-24<0.0001&&a/b*c+d-24>-0.0001)t=1;
             if(a/b*c-d-24<0.0001&&a/b*c-d-24>-0.0001)t=1;
             if(a/b*c*d-24<0.0001&&a/b*c*d-24>-0.0001)t=1;
             
             if(a/b+c/d-24<0.0001&&a/b+c/d-24>-0.0001)t=1;
             if(a/b-c/d-24<0.0001&&a/b-c/d-24>-0.0001)t=1;
             if(a/b*c/d-24<0.0001&&a/b*c/d-24>-0.0001)t=1;
             if(a/b/c/d-24<0.0001&&a/b/c/d-24>-0.0001)t=1;
             if(a*b*c*d-24<0.0001&&a*b*c*d-24>-0.0001)t=1;
}
int main()
{
      cin>>n;
      for(o=1;o<=n;o++)
      {
                       for(t=1;t<=4;t++)
                                        cin>>p[t];
                       t=0;
                       for(i=1;i<=4&&t==0;i++)
                                        for(j=1;j<=4&&t==0;j++)
                                                         if(j!=i)
                                                                 for(k=1;k<=4&&t==0;k++)
                                                                                  if(k!=i&&k!=j)
                                                                                                for(l=1;l<=4&&t==0;l++)
                                                                                                                 if(l!=i&&l!=j&&l!=k&&t==0)
                                                                                                                 {
                                                                                                                                     did(p[i],p[j],p[k],p[l]);
                                                                                                                                     //cout<<i<<" "<<j<<" "<<k<<" "<<l<<endl;
                                                                                                                 }
                       if(t==1)cout<<"Yes."<<endl;
                       else cout<<"No."<<endl;
      }
      return 0;
}


 

你可能感兴趣的:(1261 二十四点游戏)