蒟蒻30分求助
  • 板块P1236 算24点
  • 楼主__Cby___
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/11/10 21:51
  • 上次更新2023/11/10 22:01:41
查看原帖
蒟蒻30分求助
734049
__Cby___楼主2023/11/10 21:51

只算a?b?c?d 50pts.
算上(a?b)?(c?d) 只剩30pts.
本人拍不出锅,自己造了几组数据,也对了.
关键他MLE,大家帮忙看下为啥会MLE谢谢.

#include <iostream>
#include <algorithm>
using namespace std;
int a[5];
int fh[4];
int f(int a,int b,int op){
	if(op==1){
		return a+b;
	}
	if(op==2){
		return a-b;
	}
	if(op==3){
		return a*b;
	}
	if(op==4){
		if(b==0)return -10000;
		if(a%b!=0)return -10000;
		return a/b;
	}
}
int prt(int op){
	if(op==1)cout<<"+";
	if(op==2)cout<<"-";
	if(op==3)cout<<"*";
	if(op==4)cout<<"/";
}
int ss1,ss2,ss3,ss;
int main(){
	for(int i=1;i<=4;i++)cin>>a[i];
	sort(a+1,a+4);
	bool y=0;
	do{
		for(int i=1;i<=4;i++){
			for(int j=1;j<=4;j++){
				for(int k=1;k<=4;k++){
					fh[1]=i;
					fh[2]=j;
					fh[3]=k;
					ss=a[1];
					for(int l=2;l<=4;l++){
						ss=f(ss,a[l],fh[l-1]);
						if(ss==-10000){
							break;
						}
					}
					if(ss==24){
						ss=a[1];
						for(int l=2;l<=4;l++){
							cout<<ss;
							prt(fh[l-1]);
							ss=f(ss,a[l],fh[l-1]);
							cout<<a[l]<<"="<<ss<<endl;
							
						}
						y=1;
						goto label;
					}
					ss1=f(a[1],a[2],fh[1]);
					ss2=f(a[3],a[4],fh[3]);
					ss3=f(ss1,ss2,fh[2]);
					if(ss3==24&&ss1!=-10000&&ss2!=-10000){
						cout<<a[1];
						prt(fh[1]);
						cout<<a[2]<<"="<<ss1<<endl;
						cout<<a[3];
						prt(fh[3]);
						cout<<a[4]<<"="<<ss2<<endl;
						cout<<ss1;
						prt(fh[2]);
						cout<<ss2<<"="<<ss3<<endl;
						y=1;
						goto label;
					}
				}
			}
		}
	}while(next_permutation(a+1,a+4));
	label:cout<<"";
	if(!y){
		cout<<"No answer!"<<endl;
	}
	return 0;
}
2023/11/10 21:51
加载中...