社区讨论

【求条】0pts,不想调了

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

讨论操作

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

当前回复
0 条
当前快照
1 份
快照标识符
@mlhxazzk
此快照首次捕获于
2026/02/11 19:05
4 周前
此快照最后确认于
2026/02/11 19:45
4 周前
查看原帖
CPP
#include<bits/stdc++.h>
using namespace std;
int a[5];
bool can;
bool vis[5];
struct tot{
	int a , b;
	char c;
	tot(int a = 0 , int b = 0 , char c = 0) : a(a) , b(b) , c(c){
	}
}; 
stack<tot> st;
vector<tot> ans;
void C(const int &ap ,const int& bp ,const char& c){
	if(a[ap] < a[bp] && (c == '*' || c == '+')){
		st.push({a[bp] , a[ap] , c});
	}else{
		st.push({a[ap] , a[bp] , c});
	}
	if(c == '+'){
		vis[bp] = 1;
		a[ap] += a[bp];
	}else if(c == '-'){
		vis[bp] = 1;
		a[ap] -= a[bp];
	}else if(c == '*'){
		vis[bp] = 1;
		a[ap] *= a[bp];
	}else if(c == '/'){
		vis[bp] = 1;
		a[ap] /= a[bp];
	}
}
void C_(const int& ap ,const int& bp ,const char& c){
	vis[bp] = 0;
	st.pop();
	if(c == '+'){
//		cout << a[ap] << ' ' << a[bp] << endl;
		a[ap] -= a[bp];
	}else if(c == '-'){
		a[ap] += a[bp];
	}else if(c == '*'){
		a[ap] /= a[bp];
	}else if(c == '/'){
		a[ap] *= a[bp];
	}
}
int End(const int& a , const int& b , const char &c){
	if(c == '+'){
		return a + b;
	}else if(c == '-'){
		return a - b;
	}else if(c == '*'){
		return a * b;
	}else if(c =='/'){
		return a / b;
	}
}
void dfs(const int& deep){
	if(can == 1){
		return;
	}
	cout << can; 
//	cout << a[1] << ' ' << a[2] << ' ' << a[3] << ' ' << a[4] << endl; 
//	cout << vis[1] << ' ' << vis[2] << ' ' << vis[3] << ' '<< vis[4] << endl << endl;
	if(deep == 4){
		for(int i = 1;i <= 4;i ++){
			if(vis[i] == 0){
				if(a[i] == 24){
					while(!st.empty()){
						ans.push_back(st.top());
						st.pop();
					}
					reverse(ans.begin() , ans.end());
					can = 1;
					return;
				}else{
					return;
				}
			}
		}
		return;
	}
	for(int i = 1;i <= 4;i ++){
		for(int j = 1;j <= 4;j ++){
			if(vis[i] || vis[j] || i == j){
				continue;
			}
			C(i , j , '+'); 
			dfs(deep + 1);
			C_(i , j , '+');
			
			C(i , j , '-');
			dfs(deep + 1);
			C_(i , j , '-');
			
			C(i , j , '*');
			dfs(deep + 1);
			C_(i , j , '*');
			
			if(a[j] != 0 && a[i] % a[j] == 0){
				C(i , j , '/');
				dfs(deep + 1);
				C_(i , j , '/');
			}
		}
	}
}
signed main(){
	cin >> a[1] >> a[2] >> a[3] >> a[4];
	dfs(1);
	for(tot i : ans){
		
		cout << i.a << i.c << i.b << '=' << End(i.a , i.b , i.c)<<endl;
	}
	return 0;
}

回复

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

正在加载回复...