C语言24点游戏
顺序一定给出4个小于10个正整数,你可以使用加减乘除4种运算以及括号把这4个数连接起来得到一个表达式。现在的问题是,是否存在一种方式使得得到的表达式的结果等于24。这里加...
顺序一定
给出4个小于10个正整数,你可以使用加减乘除4种运算以及括号把这4个数连接起来得到一个表达式。现在的问题是,是否存在一种方式使得得到的表达式的结果等于24。
这里加减乘除以及括号的运算结果和运算的优先级跟我们平常的定义一致(这里的除法定义是实数除法)。 展开
给出4个小于10个正整数,你可以使用加减乘除4种运算以及括号把这4个数连接起来得到一个表达式。现在的问题是,是否存在一种方式使得得到的表达式的结果等于24。
这里加减乘除以及括号的运算结果和运算的优先级跟我们平常的定义一致(这里的除法定义是实数除法)。 展开
2个回答
展开全部
#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;
}
如上可以实现。
#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;
}
如上可以实现。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询