C语言24点游戏

顺序一定给出4个小于10个正整数,你可以使用加减乘除4种运算以及括号把这4个数连接起来得到一个表达式。现在的问题是,是否存在一种方式使得得到的表达式的结果等于24。这里加... 顺序一定
给出4个小于10个正整数,你可以使用加减乘除4种运算以及括号把这4个数连接起来得到一个表达式。现在的问题是,是否存在一种方式使得得到的表达式的结果等于24。

这里加减乘除以及括号的运算结果和运算的优先级跟我们平常的定义一致(这里的除法定义是实数除法)。
展开
 我来答
huifeng00
2009-12-21 · TA获得超过5233个赞
知道大有可为答主
回答量:808
采纳率:0%
帮助的人:699万
展开全部
#include <stdio.h>
#include <math.h>

double num[4];//存储4个数字
double pre = 1E-6; //精度

int go(int n)
{
int i,j;
if(n==1)
{
if(fabs(num[0]-24)<1E-6)
return 1;
else
return 0;
}
else
{
for(i=0;i<n-1;i++)
{
double a=num[i];
double b=num[i+1];
for(j=i+1;j<n-1;j++)
{
num[j]=num[j+1];
}
num[i]=a+b;
if(go(n-1)) return 1;
num[i]=a-b;
if(go(n-1)) return 1;
num[i]=a*b;
if(go(n-1)) return 1;
if(b!=0)
{
num[i]=a/b;
if(go(n-1)) return 1;
}
for(j=n-1;j>i+1;j--)
{
num[j]=num[j-1];
}
num[i+1]=b;
num[i]=a;
}
}
return 0;
}

int main()
{
double sum;
int i;
do
{
sum=0;
for(i=0;i<4;i++)
{
scanf("%lf",&num[i]);
sum+=num[i];
}
if(sum>1)
{
if(go(4))
printf("YES\n");
else
printf("NO\n");
}
}while(sum>1);
return 0;
}
如上可以实现。
小斌09
2009-12-21 · TA获得超过327个赞
知道小有建树答主
回答量:190
采纳率:0%
帮助的人:152万
展开全部
最简单的可以使用穷举的方法,

不过也有可能无解的,
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式