CSP第16次 201903-2 二十四点 C语言70分答案
注意这题我只拿了七十分哈,网上看了两种答案都感觉理解不了还是暂时放弃这题吧哈哈
测试数据也放在这里给各位了
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
#include <stdio.h>
double calculate(double a,char b,double c)//七十分未完成
{
double outcome;
if(b=='+')
outcome = a+c;
if(b=='-')
outcome = a-c;
if(b=='x')
outcome = a*c;
if(b=='/')
outcome = a/c;
// printf("运算结果%lf\n",outcome);
return outcome;
}
int main()
{
int n;
scanf("%d",&n);
int out[n];
int i;
for(i=0;i<n;i++)
{
double tmp;
char str[8];
scanf("%s",str);
str[7]='/0';
if(str[3]=='x'||str[3]=='/')//如果中间的是乘除
{
tmp = calculate(str[2]-'0',str[3],str[4]-'0');
if(str[5]=='x'||str[5]=='/')
{
tmp = calculate(tmp,str[5],str[6]-'0');
tmp = calculate(str[0]-'0',str[1],tmp);
}else
{
tmp = calculate(str[0]-'0',str[1],tmp);
tmp = calculate(tmp,str[5],str[6]-'0');
}
}else if(str[5]=='x'||str[5]=='/')//如果后面是乘除,并且确定了中间不是乘除
{
double tmp_;
tmp = calculate(str[4]-'0',str[5],str[6]-'0');
tmp_ = calculate(str[0]-'0',str[1],str[2]-'0');
tmp = calculate(tmp_,str[3],tmp);
}else//最后一种情况,中间和后面都没有乘除
{
tmp = calculate(str[0]-'0',str[1],str[2]-'0');
tmp = calculate(tmp,str[3],str[4]-'0');
tmp = calculate(tmp,str[5],str[6]-'0');
}
if((int)tmp==24)
out[i]=1;
else
out[i]=0;
}
for(i=0;i<n;i++)
{
if(out[i]==1)
printf("Yes\n");
else
printf("No\n");
}
return 0;
}