游戏规则:
从扑克中每次取出4张牌。使用加减乘除,第一个能得出24者为赢。
程序流程图如下:
代码如下:
#include <stdio.h>
#include <string.h>
#include <math.h>
#define LING 1E-6
bool judge = false; //判断是否有解。
int count = 0;
float score[4]; //定义数组输入四个数
char c[4][20] ;
void Search(int n)
{
int i=0,j=0;
if(n==1)
{
if(fabs(score[0]-24)<=LING)
{
for(i =0;i<20;i++)
{
printf("%c",c[0][i]);
}
printf("\t\t");
judge = true;
count ++;
if((count % 2)==0) //使输出时每行三个表达式
printf("\n");
}
else
{ }
}
for(i = 0; i < n; i++) //查找
{
for(j=i+1;j<n;j++) //和后面的查找进行计算
{
float a,b;
char la[20],lb[20];
a=score[i];
b=score[j];
score[j]=score[n-1];
strcpy(la,c[i]);
strcpy(lb,c[j]);
strcpy(c[j],c[n-1]);
sprintf(c[i],"(%s+%s)",la,lb);
score[i]=a+b;
Search(n-1);
sprintf(c[i],"(%s-%s)",la,lb);
score[i]=a-b;
Search(n-1);
sprintf(c[i],"(%s-%s)",lb,la);
score[i]=b-a;
Search(n-1);
sprintf(c[i],"(%s*%s)",la,lb);
score[i]=a*b;
Search(n-1);
if(b!=0)
{
sprintf(c[i],"(%s/%s)",la,lb);
score[i]=a/b;
Search(n-1);
}
if(a!=0)
{
sprintf(c[i],"(%s/%s)",lb,la);
score[i]=b/a;
Search(n-1);
}
score[i] = a; // 最后一层的Search(2)调用完成后将a重新赋值给score[i]即score[0]
score[j] = b; // 最后一层的Search(2)调用完成后将b重新赋值给score[j]即score[1]
strcpy(c[i], la) ;
strcpy(c[j], lb) ;
}
}
}
int main()
{
int i,j;
printf("输入四个数:\n");
for(i=0;i<4;i++)
{
char f[20],s;
int a;
printf("第%d个数为:",i+1);
scanf("%f",&score[i]);
a=(int)score[i];
s=char(a+48);
f[0]=s;
for(j=1;j<20;j++)
{
f[j]=0;
}
strcpy(c[i],f);
}
printf("\n");
Search(4);
if(judge==true)
{
printf("\n\n成功\n");
printf("计算方法共有:%d\n",count);
}
else
{
printf("失败");
}
return 0;
}
这个程序实现了从键盘输入四个数,程序自动列出所有可能算出24的表达式