CCF 201903-2 二十四点 满分代码

这是一篇关于2019年CCF算法竞赛中二十四点问题的满分解决方案。文章详细介绍了如何在1秒内、内存限制512MB的条件下,通过编程求解所有可能的组合,达到完美解答。
作者:its_ycm 
来源:优快云 
原文:https://blog.csdn.net/its_ycm/article/details/111069267 
版权声明:本文为博主原创文章,转载请附上博文链接!

试题编号: 201903-2
试题名称: 二十四点
时间限制: 1.0s
内存限制: 512.0MB
在这里插入图片描述
在这里插入图片描述

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

int func(int n1,int n2,char c)
{
	if(c=='x')	return n1 * n2;
	if(c=='/')	return n1 / n2;
	if(c=='+')	return n1 + n2;
	if(c=='-')	return n1 - n2;
}

//乘法除法必须从左向右计算 

int main()
{
	int n,a[4],sum=0;
	string s;
	cin >> n;
	for(int i=0;i<n;++i){
		cin >> s;
		a[0] = (int)s[0] - '0';
		a[1] = (int)s[2] - '0';
		a[2] = (int)s[4] - '0';
		a[3] = (int)s[6] - '0';
		if(s[3] == 'x'|| s[3] == '/')//!!!!!!!!!!!!!不是 (s[3] == 'x'||'/') 
			if(s[5] == 'x'|| s[5] == '/') 
				if(s[1] == 'x'|| s[1] == '/') 
					sum = func(func(func(a[0],a[1],s[1]),a[2],s[3]),a[3],s[5]);
				else
					sum = func(a[0],func(func(a[1],a[2],s[3]),a[3],s[5]),s[1]);
			else
				if(s[1] == 'x'|| s[1] == '/')
					sum = func(func(func(a[0],a[1],s[1]),a[2],s[3]),a[3],s[5]);									
				else
					sum = func(func(a[0],func(a[1],a[2],s[3]),s[1]),a[3],s[5]);
		else
			if(s[5] == 'x'|| s[5] == '/')
				sum = func(func(a[0],a[1],s[1]),func(a[2],a[3],s[5]),s[3]);
			else
				sum = func(func(func(a[0],a[1],s[1]),a[2],s[3]),a[3],s[5]);
		if(sum == 24)//此处可以每判断一条,输出一句。
			cout << "Yes" << endl;
		else
			cout << "No" << endl;
	}

	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值