#include<stdio.h>
#include<math.h>
int suan24(double m, double n, double c, double d);
double suan(double a, double b, int c);
int main()
{
double a[5], sum = 0;
scanf("%lf%lf%lf%lf", &a[1], &a[2], &a[3], &a[4]);
int used[5] = {0};
int i, j, k, m;
for(i = 1; i <= 4; i++)
{
used[i]++;
for(j = 1; j <= 4; j++)
{
used[j]++;
for(k = 1; k <= 4; k++)
{
used[k]++;
for(m = 1; m <= 4; m++)
{
used[m]++;
if(used[1] == 1 && used[2] == 1 && used[3] == 1 && used[4] == 1)
{
if(suan24(a[i], a[j], a[k], a[m]) == 1)
{
sum = 1;
break;
}
used[m]--;
}
else
{
used[m]--;
}
}
used[k]--;
}
used[j]--;
}
used[i]--;
}
if(sum == 1)
{
printf("Yes\n");
}
else
{
printf("No\n");
}
}
double suan(double a, double b, int c)
{
if(c == 0)
{
return(a + b);
}
else if(c == 1)
{
return(a - b);
}
else if(c == 2)
{
return(a * b);
}
else if(c == 3)
{
if(b == 0)
{
return 5000;//让结果绝对不等于24
}
else
{
return(a / b);
}
}
else
{
return 50000;//让结果绝对不等于24
}
}
int suan24(double m, double n, double c, double d)
{
int i, j, k;
int flag;
flag = 0;
for(i = 0; i <= 3; i++)
{
for(j = 0; j <= 3; j++)
{
for(k = 0; k <= 3; k++)
{
if(fabs(suan(suan(suan(m, n, k), c, j), d, i) - 24) < 0.0001 || fabs(suan(suan(m, n, i), suan(c, d, j), k) - 24) < 0.0001 || fabs(suan(suan(m, suan(n, c, i), j), d, k) - 24) < 0.0001 || fabs(suan(m, suan(suan(n, c, i), d, j), k) - 24) < 0.0001 || fabs(suan(m, suan(n, suan(c, d, i), j), k) - 24) < 0.0001)如果直接判断suan(……)== 24会出现不完全正确,fabs是计算机C语言求浮点数的绝对值
{
flag = 1;
break;
}//为什么在这里加一个else{flag=0;}结果错误,不加的话运行正确
}
}
}
return(flag);
}
算24,不会递归,所以没用,很粗糙的程序
最新推荐文章于 2021-03-14 20:46:06 发布