CCF二十四点

CCF二十四点_第1张图片
CCF二十四点_第2张图片

思路:用栈吧他们全算成加法当碰到除法(乘法)运算符让之前的数字出栈并记录与后面的数字相除(相乘)然后得到的数压入栈中。最后求和。(NND没用万能头我特么编译错误)

#include

using namespace std;

int a[100100];
stack<int> num;
int main()
{
	std::ios::sync_with_stdio(false);
	int n;
	char str[14];
	cin >> n;
	while (n--)
	{
		cin >> str;
		while (!num.empty())num.pop();
		int i = 0;
		while (i < strlen(str))
		{
			if (isdigit(str[i]))
			{
				num.push(str[i] - '0');
				i++;
			}
			else
			{

				if (str[i] == '+')
				{
					
					i++;
				}
				else if (str[i] == '-')
				{
					
					i++;
					num.push((str[i] - '0') * -1);
					i++;
				}
				else if (str[i] == 'x')
				{
					int x = num.top();
					num.pop();
					i++;
					num.push((str[i] - '0') * x);
					i++;
				}
				else if (str[i] == '/')
				{
					int y = num.top();
					num.pop();
					i++;
					num.push(y / (str[i] - '0'));
					i++;
				}

			}
		}
		int sum = 0;
		while (!num.empty())
		{
			
			sum += num.top();
			num.pop();

		}
		
		if (sum == 24)
			cout << "Yes" << endl;
		else
			cout << "No" << endl;
	}

	return 0;

}
/*10
9+3+4x3
5+4x5x5
7-9-9+8
5x6/5x4
3+5+7+9
1x1+9-9
1x9-5/9
8/5+6x9
6x7-3x6
6x4+4/5*/

你可能感兴趣的:(CCF)