ccf csp 201903-2 二十四点

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

string s;

bool is24(string);
int oper(int, int, char);
bool isSup(char);

int main(){
	int n;
	cin >> n;
	for(int i = 0; i < n; i++){
		cin >> s;
		if(is24(s)){
			cout << "Yes" << endl;
		}else{
			cout << "No" << endl;
		}
	}
	
	return 0;
}

bool is24(string s){
	int count = 0;
	
	if(isSup(s[3])){
		if(!isSup(s[3]) && isSup(s[5])){
			count += oper(
				oper(oper(s[2] - '0', s[4] - '0', s[3]), s[6] - '0', s[5]),
					s[0] - '0',
						s[1]);
		}else if(isSup(s[3]) && isSup(s[5])){
			count += oper(
				oper(oper(s[0] - '0', s[2] - '0', s[1]), s[4] - '0', s[3]),
					s[6] - '0',
						s[5]);
		}else{
			count += oper(
				oper(oper(s[2] - '0', s[4] - '0', s[3]), s[0] - '0', s[1]),
					s[6] - '0',
						s[5]);
		}
	}else{
		if((!isSup(s[3]) && isSup(s[5])) || (isSup(s[3]) && isSup(s[5]))){
			count += oper(
				oper(s[0] - '0', s[2] - '0', s[1]),
					oper(s[4] - '0', s[6] - '0', s[5]),
						s[3]);
		}else{
			count += oper(
				oper(oper(s[0] - '0', s[2] - '0', s[1]), s[4] - '0', s[3]),
					s[6] - '0',
						s[5]);
		}
		
	}
	
	return (count == 24 ? true : false);
}

int oper(int n1, int n2, char oper){
	switch(oper){
		case '+':
			return n1 + n2;
		case '-':
			return n1 - n2;
		case 'x':
			return n1 * n2;
		case '/':
			return n1 / n2;
	}
}

bool isSup(char ch){
	if(ch == 'x' || ch == '/'){
		return true;
	}else{
		return false;
	}
}

不保证完全通过,仅测试了样例。

猜你喜欢

转载自blog.csdn.net/lalala_HFUT/article/details/88623926