给出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