萌新刚学OI,求助一个简单的24点程序awa
  • 板块题目总版
  • 楼主SIXIANG32
  • 当前回复20
  • 已保存回复20
  • 发布时间2020/7/20 11:15
  • 上次更新2023/11/6 22:46:47
查看原帖
萌新刚学OI,求助一个简单的24点程序awa
298549
SIXIANG32楼主2020/7/20 11:15
给出4个小于10个正整数,你可以使用加减乘除4种运算以及括 号把这4个数连接起来得到一个表达式。现在的问题是,是否存在一种方式使得得到的表达式的结果等于24。
这里加减乘除以及括号的运算结果和运算的优先级跟我们平常 的定义一致(这里的除法定义是实数除法)。
比如,对于5,5,5,1,我们知道5 * (5 – 1 / 5) = 24,因此 可以得到24。又比如,对于1,1,4,2,我们怎么都不能得到 24。

输入格式
  输入多组数据
每行4个数,以0结束。

输出格式
  输出多行,每行成功得到24输出Yes,不能组成24输出No

我的程序调了N遍依旧过不了5 5 5 1这组数据/kk
求助awa

#include<iostream>
#include<algorithm>
#define check value(i,j,k)==24
using namespace std;
double a[5],s[5];
double value(int a_,int b_,int c_)
{
	s[1]=a_,s[2]=b_,s[3]=c_;
	double sum=a[1];
	for(int p=1;p<=3;p++)
	{
		if(s[p]==1)sum+=a[p+1];
		if(s[p]==2)sum-=a[p+1];
		if(s[p]==3)sum*=a[p+1];
		if(s[p]==4)sum/=double(a[p+1]);
	}
	return sum;
}
bool twenty_four()
{
	for(int p=1;p<=24;p++)
	{
		next_permutation(a+1,a+4+1);
		for(int i=1;i<=4;i++)
			for(int j=1;j<=4;j++)
				for(int k=1;k<=4;k++)
					if(check)
						return 1;
	}
	return 0;
}
int main()
{
	while(cin>>a[1]>>a[2]>>a[3]>>a[4])
	{
		if(twenty_four())cout<<"Yes"<<endl;
		else cout<<"No"<<endl;
	}
}

求助qwq

2020/7/20 11:15
加载中...