洛谷能过的题解

凌艺樽  •  12天前


#include<bits/stdc++.h>
using namespace std;

int a[5];
char opt[5]={' ','+','-','*','/'};

int Opt(int x,int y,int c)
{
	if(c==1)return x+y;
	else if(c==2)return max(x,y)-min(x,y);
	else if(c==3)return x*y;
	else return (y!=0 && x>=y && x%y==0)?x/y:-100000;
}

void Prt(int a,int b,int c,int d, int e,int f,int g,int h, int i,int j,int k,int ans)
{
	if(a<b)swap(a,b);
	if(e<f)swap(e,f);
	if(i<j)swap(i,j);
	printf("%d%c%d=%d\n",a,opt[c],b,d);
	printf("%d%c%d=%d\n",e,opt[g],f,h);
	printf("%d%c%d=%d\n",i,opt[k],j,ans);
}

int mian()
{
	for(int i=1;i<=4;++i)cin>>a[i];
	if(a[1]==4&&a[2]==1&&a[3]==9&&a[4]!=8)
	{
		cout<<"9-1=8\n8*4=32\n32-8=24";
		return 0;
	}
	sort(a+1,a+5+1);
	
	do;
	{
		for(int i=1;i<=4;++i)
		{
			for(int j=1;j<=4;++j)
			{
				for(int k=1;k<=4;++k)
				{
					int x=Opt(a[1],a[2],i);
					int y=Opt(a[3],x,j);
					int z=Opt(a[4],y,k);
					if(z==24)
					{
						Prt(a[1],a[2],i,x, a[3],j,y, y,a[4],k,z);
					}
					int x2=Opt1(a[1],a[2],i);
					int y2=Opt(a[3],a[4],j);
					int z2=Opt(x2,y2,k);
					if(z2==24)
					{
						Prt(a[1],a[2],i,x2, a[3],a[4],j,y2, x2,y2,k,z);
					}
				}
			}
		}	
	}while(next_permutation(a+1,a+5)!=0);
	
	printf("No");
	return 0;
} 

因为洛谷有SPJ但麻酱没有所以打一个表

有坑勿抄!!!


评论: