90分求调
  • 板块P1236 算24点
  • 楼主thy80
  • 当前回复1
  • 已保存回复1
  • 发布时间2024/6/15 18:40
  • 上次更新2024/6/15 21:14:50
查看原帖
90分求调
768382
thy80楼主2024/6/15 18:40

测试点十WA了

#include<bits/stdc++.h>
using namespace std;
struct node{
	int number;
	char s;
}p[10];
int a[70000];
void dfs(int ,int );
bool flg=false;
int main(){
	for(int i=1;i<=4;i++)
	{
		int x;
		scanf("%d",&x);
		a[x]++;
	}
	dfs(24,1);
	if(flg==false)
		printf("No answer!");
	return 0;
} 

void dfs(int x,int id)
{
	if(id==4)
	{
		
		if(a[x]>0)
		{
//			for(int i=1;i<=9;i++)
//		{
//			printf("%d %d->%d--",x,a[i],i);
//		}
			flg=true;
			int g=x;
			for(int i=3;i>0;i--)
			{
				if(p[i].s=='+')
				{
					printf("%d+%d=%d\n",max(g,p[i].number),min(g,p[i].number),(g+p[i].number));
					g=g+p[i].number;
				}
				else if(p[i].s=='-')
				{
					printf("%d-%d=%d\n",max(g,p[i].number),min(g,p[i].number),(g-p[i].number));
					g=g-p[i].number;
				}
				else if(p[i].s=='/')
				{
					printf("%d/%d=%d\n",g,p[i].number,(g/p[i].number));
					g=g/p[i].number;
				}
				else if(p[i].s=='*')
				{
					printf("%d*%d=%d\n",max(g,p[i].number),min(g,p[i].number),(g*p[i].number));
					g=g*p[i].number;
				}
			}
		}
		return ;
	}
	for(int i=1;i<=4;i++)
	{
		for(int j=1;j<=9;j++)
		{
			if(a[j]>=1)
			{
				switch(i){
					case 1:
						if(x-j>0)
						{
							a[j]--;
							p[id].number=j;
							p[id].s='+';
							dfs(x-j,id+1);
							a[j]++;
							break;
						}
					case 2:
						a[j]--;
						p[id].number=j;
						p[id].s='-';
						dfs(x+j,id+1);
						a[j]++;
						break;
					case 3:
						if(j!=0)
						{
							a[j]--;
							p[id].number=j;
							p[id].s='/';
							dfs(x*j,id+1);
							a[j]++;
						}
						break;
					case 4:
						if(j!=0&&x%j==0)
						{
							a[j]--;
							p[id].number=j;
							p[id].s='*';
							dfs(x/j,id+1);
							a[j]++; 
						}
						break;
				}		
			}
			if(flg==true)
				return ;
		}
	}
}
//+-*/
2024/6/15 18:40
加载中...