1. 程式人生 > >2018北郵網研機試-C

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

此為回憶版,如有錯,歡迎糾錯。謝謝