社区讨论

70分

P1236算24点参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@m2lvosmc
此快照首次捕获于
2024/10/23 20:56
去年
此快照最后确认于
2024/10/23 21:53
去年
查看原帖
C
#include<bits/stdc++.h>
#define int long long
#define double long double
using namespace std;
int a[4];
bool flag;
char ans[3];
void dfs(int u,int last){
	if(u==4){
		if(last==24){
			flag=true;
		}return ;
	}if(flag||last==0||last==24)return ;
	ans[u-1]='+';
	dfs(u+1,last+a[u]);
	if(flag)return ;
	ans[u-1]='-';
	dfs(u+1,last-a[u]);
	if(flag)return ;
	ans[u-1]='*';
	dfs(u+1,last*a[u]);
	if(flag)return ;
	ans[u-1]='/';
	dfs(u+1,last/a[u]);
	if(flag)return ;
}
void print(){
	int last=a[0];
	if(ans[0]=='+')last+=a[1];
	if(ans[0]=='-')last-=a[1];
	if(ans[0]=='*')last*=a[1];
	if(ans[0]=='/')last/=a[1];
	if(ans[0]=='+'||ans[0]=='*')cout<<max(a[0],a[1])<<ans[0]<<min(a[0],a[1])<<'='<<last<<"\n";
	else cout<<a[0]<<ans[0]<<a[1]<<'='<<last<<"\n";
	a[1]=last;
	if(ans[1]=='+')last+=a[2];
	if(ans[1]=='*')last*=a[2];
	if(ans[1]=='/')last/=a[2];
	if(ans[1]=='-')last-=a[2];
	if(ans[1]=='+'||ans[1]=='*')cout<<max(a[1],a[2])<<ans[1]<<min(a[1],a[2])<<'='<<last<<"\n";
	else cout<<a[1]<<ans[2]<<a[2]<<'='<<last<<"\n";
	a[2]=last;
	if(ans[2]=='+')last+=a[3];
	if(ans[2]=='-')last-=a[3];
	if(ans[2]=='*')last*=a[3];
	if(ans[2]=='/')last/=a[3];
	if(ans[2]=='+'||ans[2]=='*')cout<<max(a[2],a[3])<<ans[2]<<min(a[2],a[3])<<'='<<last<<"\n";
	else cout<<a[2]<<ans[2]<<a[3]<<'='<<last<<"\n";
}
signed main(){
	for(int i=0;i<4;i++){
		cin>>a[i];
	}sort(a,a+4);
	do{
		dfs(1,a[0]);
		if(flag){
			print();
			return 0;
		}
	}while(next_permutation(a,a+4));
	cout<<"No answer!";
	return 0;
}

回复

0 条回复,欢迎继续交流。

正在加载回复...