CCF CSP 201903-2 二十四点

试题编号: 201903-2
试题名称: 二十四点
时间限制: 1.0s
内存限制: 512.0MB

在这里插入图片描述
在这里插入图片描述

思路:

1.将四个数字和三个运算符分别用vector存储;
2.每次遍历运算符vector,寻找’x’或者’/’,然后进行运算,如果没有找到,则用第一个运算符进行运算;
3.每次运算后将参加运算的两个数字和运算符删去,在数字vector里对应位置插入运算结果;
4.一共算三次,结束后根据运算结果是否为24分别进行输出;

代码:

#include<iostream>
#include<vector>
using namespace std;
int operate(int a,char c,int b){
	if(c=='+') return a+b;
	if(c=='-') return a-b;
	if(c=='x') return a*b;
	if(c=='/') return a/b;
}
int main(){
	int n;
	scanf("%d",&n);
	for(int i=0;i<n;i++){
		vector<int> num(4);
		int pos,rs=0;
		vector<char> op(3);
		for(int j=0;j<3;j++){
			scanf("%d",&num[j]);
			scanf("%c",&op[j]);
		}
		scanf("%d",&num[3]);
		for(int j=0;j<3;j++){
			for(pos=0;pos<op.size()&&op[pos]!='x'&&op[pos]!='/';pos++);
			if(pos==op.size()) pos=0;
			rs=operate(num[pos],op[pos],num[pos+1]);
			num[pos]=rs; 
			num.erase(num.begin()+pos+1);
			op.erase(op.begin()+pos);
		}
		printf(rs==24?"Yes\n":"No\n");
	}
	return 0;
}
posted @ 2019-09-22 18:20  YuhanのBlog  阅读(144)  评论(0编辑  收藏  举报