2018北邮网研机试-C

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;
} 

此为回忆版,如有错,欢迎纠错。谢谢

猜你喜欢

转载自blog.csdn.net/xiaqinnnn/article/details/79809427