C简单的24点
输入为4个数字,a,b,c,d。若a^b^c^d=24,则称该数组满足24点,其中^可以为+、-、*、/任一个,若不能得到结果24,则称该数组不满足24点。(计算为实型)
输入:
第一行为测试组数t
接下来t行,每一行为四个整数a,b,c,d,测试是否满足24点
1<=a,b,c,d<10000(右区间忘了,反正四个数不为0)
输出
在每一行
若满足,输出YES
不满足,输出NO
#include "stdio.h"
float sum=0,sum1=0;
void cul(float a,float b,int x)
{
if(x==1)
{
sum = (a+b)/1.0;
}
else if(x==2)
{
sum =(a-b)/1.0;
}
else if(x==4&&b!=0)
{
sum =(a/b)/1.0;
}
else
sum =(a*b)/1.0;
}
int judge(int x)
{
if(x==1||x==2)
return 1;
else
return 2;
}
int main()
{
float a,b,c,d;
int t;
bool state=false;
scanf("%d",&t);
while(t--)
{
scanf("%f%f%f%f",&a,&b,&c,&d);
state = false;
for(int i=1;i<=4;i++)
{
for(int j=1;j<=4;j++)
{
for(int k=1;k<=4;k++)
{
int x=judge(i);
int y=judge(j);
int z=judge(k);
if(x==y&y==z||x==y&y>z||x>y&y==z)//111 222 211 221 //从左到右
{
cul(a,b,i);
cul(sum,c,j);
cul(sum,d,k);
}
else if(x==y&y<z)//112
{
cul(c,d,k);
cul(b,sum,j);
cul(a,sum,i);
}
else if(x<y&y==z)//122
{
cul(b,c,j);
cul(sum,d,k);
cul(a,sum,i);
}
else if(x==z&&y<z)//212
{
cul(a,b,i);
sum1=sum;
cul(c,d,k);
cul(sum1,sum,j);
}
else if(x==z&y>z)//121
{
cul(b,c,j);
cul(a,sum,i);
cul(sum,d,k);
}
if(sum==24.0)
{
state=true;
break;
}
}
}
}
if(state == true)
printf("YES\n");
else
printf("NO\n");
}
return 0;
}
此为回忆版,如有错,欢迎纠错。谢谢