c语言的24点计算:
输入为1-9的4个数字,
输出为+-*/()运算之后等于24的所有结果
#include<stdio.h>
#include <string.h>
double counttest(int a1,int a2,int a3,int a4, int b1,int b2,int b3)
{
double num = 0;
switch(b1)
{
case 0:
num = a1+a2;
break;
case 1:
num = a1-a2;
break;
case 2:
num = a1*a2;
break;
case 3:
if(a2==0)
return -1;
num = (double)a1/((double)a2);
break;
default:
return 1;
}
// printf("%lf\n",num);
switch(b2)
{
case 0:
num = num+a3;
break;
case 1:
num = num-a3;
break;
case 2:
num = num*a3;
break;
case 3:
if(a3==0)
return -1;
num = (double)num/((double)a3);
break;
default:
return 1;
}
// printf("%lf\n",num);
switch(b3)
{
case 0:
num = num+a4;
break;
case 1:
num = num-a4;
break;
case 2:
num = num*a4;
break;
case 3:
if(a4==0)
return -1;
num = (double)num/((double)a4);
break;
default:
return 1;
}
// printf("%lf\n",num);
return num;
}
#define CAL24POINT_MAX_SIZE 128
int Cal24Point(int x1,int x2,int x3,int x4,char *calRst)
{
int a[4];
char cou[4][2] = {"+","-","*","/"};
char tmp[32];
int status = 1;
float num;
int i = 0;
int i1 = 0;
int i2 = 0;
int i3 = 0;
int j = 0;
int k = 0;
int cnt = 0;
// FunA(1);
if(0 == calRst)
{
return -1;
}
memset(calRst,0,CAL24POINT_MAX_SIZE);
if(((x1 < 0 ) || (x1 > 10 ))
|| ((x2 < 0 ) || (x2 > 10 ))
|| ((x3 < 0 ) || (x3 > 10 ))
|| ((x4 < 0 ) || (x4 > 10 )))
{
sprintf(calRst,"Param Err:%d %d %d %d ",x1,x2,x3,x4);
return -1;
}
a[0] = x1;
a[1] = x2;
a[2] = x3;
a[3] = x4;
num = 0;
status = 1;
for(i = 0;(i < 4); i++)
{
for(i1 = 0;(i1 < 4); i1++)
{
if(i1 == i)
continue;
for(i2 = 0;(i2 < 4); i2++)
{
if((i2 == i)||(i2 == i1))
continue;
for(i3 = 0;(i3 < 4); i3++)
{
if((i3 == i)||(i3 == i1)||(i3 == i2))
continue;
for(j = 0; (j < 4); j++)
{
for(k = 0; (k < 4); k++)
for(cnt = 0; (cnt < 4); cnt++)
{
num = counttest(a[i],a[i1],a[i2],a[i3],j,k,cnt);
if(num == 24.0)
{
if(k>1)
sprintf(tmp,"(%d %s %d )%s %d %s %d = 24 \n",a[i],cou[j],a[i1],cou[k],a[i2],cou[cnt],a[i3]);
else if(cnt>1)
sprintf(tmp,"(%d %s %d %s %d )%s %d = 24 \n",a[i],cou[j],a[i1],cou[k],a[i2],cou[cnt],a[i3]);
else
sprintf(tmp,"%d %s %d %s %d %s %d = 24 \n",a[i],cou[j],a[i1],cou[k],a[i2],cou[cnt],a[i3]);
status=0;
if(strlen(calRst) + strlen(tmp) >= CAL24POINT_MAX_SIZE)
{
return 0;
}
strcat(calRst,tmp);
}
}
}
}
}
}
}
if(status == 1)
{
sprintf(calRst,"Can't find answer %d %d %d %d ",a[0],a[1],a[2],a[3] );
status=0;
return 1;
}
return 0;
}
int main()
{
int a = 0, b = 0, c = 0, d = 0;
char result[CAL24POINT_MAX_SIZE];
while(1)
{
printf("please input 4 value (0 < value < 10)\n");
scanf("%d %d %d %d",&a,&b,&c,&d);
Cal24Point(a,b,c,d, result);
printf("result is :\n%s \n",result);
}
return 0;
}