算24,不会递归,所以没用,很粗糙的程序



#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);



}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值