hnu 12886 Cracking the Safe

来源:互联网 发布:淘宝关注链接怎样设置 编辑:程序博客网 时间:2024/04/29 08:09

 2014第八场比赛相对来说比较水  没什么好说的题 在这贴一个算24的板子吧。。。。直接暴力啊  注意精度问题

#include<iostream>#include<cmath>#include<cstdio>using namespace std;int a[4];int b[24][4]={{0,1,2,3},{0,1,3,2},{0,2,1,3},{0,2,3,1},{0,3,1,2},{0,3,2,1},              {1,0,2,3},{1,0,3,2},{1,2,0,3},{1,2,3,0},{1,3,0,2},{1,3,2,0},              {2,1,0,3},{2,1,3,0},{2,0,1,3},{2,0,3,1},{2,3,1,0},{2,3,0,1},              {3,1,2,0},{3,1,0,2},{3,2,1,0},{3,2,0,1},{3,0,1,2},{3,0,2,1}};double yunsuan(double x,double y,int h){    if(h==0) return (x+y);    if(h==1) return (x-y);    if(h==2) return (x*y);    if(h==3) return (x*1.0/y);}double pd1(int i,int j,int k,int l){   double pd;    pd=yunsuan(1.0*a[b[i][0]],1.0*a[b[i][1]],j);    pd=yunsuan(pd,1.0*a[b[i][2]],k);    pd=yunsuan(pd,1.0*a[b[i][3]],l);    return pd;}double pd2(int i,int j,int k,int l){   double pd,pdd;    pd=yunsuan(1.0*a[b[i][0]],1.0*a[b[i][1]],j);    pdd=yunsuan(1.0*a[b[i][2]],1.0*a[b[i][3]],k);    pd=yunsuan(pd,pdd,l);    return pd;}double pd3(int i,int j,int k,int l){   double pd;    pd=yunsuan(1.0*a[b[i][1]],1.0*a[b[i][2]],j);    pd=yunsuan(pd,1.0*a[b[i][3]],k);    pd=yunsuan(1.0*a[b[i][0]],pd,l);    return pd;}double pd4(int i,int j,int k,int l){   double pd;    pd=yunsuan(1.0*a[b[i][1]],1.0*a[b[i][2]],j);    pd=yunsuan(1.0*a[b[i][0]],pd,k);    pd=yunsuan(pd,1.0*a[b[i][3]],l);    return pd;}double pd5(int i,int j,int k,int l){   double pd;    pd=yunsuan(1.0*a[b[i][2]],1.0*a[b[i][3]],j);    pd=yunsuan(1.0*a[b[i][1]],pd,k);    pd=yunsuan(1.0*a[b[i][0]],pd,l);    return pd;}char fuhao(int h){    if(h==0) return '+';    if(h==1) return '-';    if(h==2) return '*';    if(h==3) return '/';}int main(){    int tc;    scanf("%d",&tc);    while(tc--)    {        int i,j,k,l;        scanf("%d%d%d%d",&a[0],&a[1],&a[2],&a[3]);        int flag=1;        for(i=0;i<24&&flag;i++)         for(j=0;j<4&&flag;j++)            for(k=0;k<4&&flag;k++)                for(l=0;l<4&&flag;l++)                {                    if (abs(pd1(i,j,k,l)-24)<0.001)                        {printf("YES\n");                        flag=0;                         break;}                    if (abs(pd2(i,j,k,l)-24)<0.001)                        {printf("YES\n");                         flag=0;                         break;}                    if (abs(pd3(i,j,k,l)-24)<0.001)                        {printf("YES\n");                         flag=0;                         break;}                    if (abs(pd4(i,j,k,l)-24)<0.001)                        {printf("YES\n");                         flag=0;                         break;}                    if (abs(pd5(i,j,k,l)-24)<0.001)                        {printf("YES\n");                         flag=0;                         break;}                }           if(flag) printf("NO\n");    }    return 0;}

原版被我改了  原版中是把把算24具体的例子给出来的   感觉在ACM比赛中不太现实  就给这个判断四个数能不能通过计算得到24的吧

0 0
原创粉丝点击