【CSP CCF记录】201903-2第16次认证 二十四点

题目

样例1输入

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

样例1输出

Yes

No

No

Yes

Yes

No

No

No

Yes

Yes

样例1解释

思路

参考:CCF小白刷题之路---201903-2 二十四点(C/C++ 100分)_ccf认证小白-CSDN博客

(自己写了好几种,发现还是这个最清晰易懂)

本题关键:

  • 字符转数字、字符转运算符
  • 先乘除、后加减

用num和op两个vector分别存储数字和运算符。

第一个for循环进行乘除运算;第二个for循环进行加减运算。

每次运算后,将已经使用过的数字和运算符从容器中删除,需要j--,以防漏算。

可以通过手算改进代码细节。以下以9+3+4x3为例,进行了手算,方便理解。

其他知识点: erase的用法

代码

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;

int main()
{
	int n;
	cin>>n;
	for(int i=0;i<n;i++)
	{
		string a; 
		cin>>a;
		vector<int> num;//存放数字
		vector<char> op;//存放运算符
		
		for(int j=0;j<a.length();j++) 
		{
			if(a[j]>='0' && a[j]<='9') num.push_back(a[j]-'0');
            else op.push_back(a[j]);
		}
		int j=0;
		for(int j=0; j<op.size();j++)
		{
			if(op[j]=='x')
			{
				num[j]=num[j]*num[j+1];
				num.erase(num.begin() + j + 1);
				op.erase(op.begin() + j);
				j=-1;
				
			}
			if(op[j]=='/')
			{
				num[j]=num[j]/num[j+1];
				num.erase(num.begin() + j + 1);
				op.erase(op.begin() + j);
				j=-1;
			}
		}
		j=0;
		for(int j=0; j<op.size();j++)
		{
			if(op[j]=='+')
			{
				num[j]=num[j]+num[j+1];
				num.erase(num.begin() + j + 1);
				op.erase(op.begin() + j);
				j=-1;
			}
			if(op[j]=='-')
			{
				num[j]=num[j]-num[j+1];
			    num.erase(num.begin() + j + 1);
				op.erase(op.begin() + j);
				j=-1;
			}
		}
		if(num[0]==24)
		{
			cout<<"Yes"<<endl;
		 } 
		 else
		 {
		 	cout<<"No"<<endl;
		 }
	}
	return 0;
}

运行

因为csp练习系统很坏地改版了,所以只能用所给样例运行一下。

相关推荐
可峰科技1 分钟前
Apriltag_ros CMakeList.txt一句话导致其他包编译失败
c++
code bean1 分钟前
【C++ 】C++ 与 C#:using 关键字、命名空间及作用域解析符对比
开发语言·c++·c#
我发在否1 分钟前
Rust > 牛客OJ在线编程常见输入输出练习场
算法·rust
CAE虚拟与现实2 分钟前
C# 调用 DLL为什么不像 C/C++调用 DLL 时需要lib库
开发语言·c++·c#·动态链接库·dll库·lib库
忆湫淮2 分钟前
ENVI 5.6 利用现场标准校准板计算地表反射率具体步骤
大数据·人工智能·算法
Larry_Yanan2 分钟前
Qt线程使用(一)直接继承QThread类
开发语言·c++·qt·ui
Ayanami_Reii5 分钟前
基础数据结构应用-一个简单的整数问题
数据结构·算法·树状数组·fenwick tree
Yu_Lijing12 分钟前
【个人项目】C++基于websocket的多用户网页五子棋(上)
开发语言·c++·websocket
Ayanami_Reii18 分钟前
进阶数据结构应用-一个简单的整数问题2(Fenwick-Tree 解法)
数据结构·算法·前缀和·差分·树状数组·fenwick tree
老黄编程19 分钟前
点云生成深度图的原理及算法步骤和参数详细说明
数学·算法·点云·深度图