输入4个1-10之间的数,通过+ - * /能否得到24。
代码实现:
#include "pointGame24.h"
/*****************************数组放符号******************************/
char mark[4]={'+','-','*','/'};
/*计算24点游戏可以分为5种模式,即就是括号加在什么地方的问题。可以分为下面五种*/
/*****************************************************************************/
/* 1. ((a b) c) d 2. (a (b c)) d 3. a (b (c d)) 4. a ((b c) d) 5. (a b) (c d)*/
/*****************************************************************************/
/*
中间计算,两两计算,并判断 + - * /
用于下面5中模式中间计算
*/
static float calculateTwo(float x,float y,int mark)
{
switch(mark)
{
case 0:return x+y;
case 1:return x-y;
case 2:return x*y;
case 3:return x/y;
}
return 0.0;
}
/*
进行计算的模式是:((a b) c) d
*/
static float calculateModeOne(float a,float b,float c,float d,int mark1,int mark2,int mark3)
{
float value1,value2,value3;
value1=calculateTwo(a,b,mark1);
value2=calculateTwo(value1,c,mark2);
value3=calculateTwo(value2,d,mark3);
return value3;
}
/*
进行计算的模式是:(a (b c)) d
*/
static float calculateModeTwo(float a,float b,float c,float d,int mark1,int mark2,int mark3)
{
float value1,value2,value3;
value1=calculateTwo(b,c,mark2);
value2=calculateTwo(a,value1,mark1);
value3=calculateTwo(value2,d,mark3);
return value3;
}
/*
进行计算的模式是:a (b (c d))
*/
static float calculateModeThree(float a,float b,float c,float d,int mark1,int mark2,int mark3)
{
float value1,value2,value3;
value1=calculateTwo(c,d,mark3);
value2=calculateTwo(b,value1,mark2);
value3=calculateTwo(a,value2,mark1);
return value3;
}
/*
进行计算的模式是:a ((b c) d)
*/
static float calculateModeFour(float a,float b,float c,float d,int mark1,int mark2,int mark3)
{
float value1,value2,value3;
value1=calculateTwo(b,c,mark2);
value2=calculateTwo(value1,d,mark3);
value3=calculateTwo(a,value2,mark1);
return value3;
}
/*
进行计算的模式是:(a b) (c d)
*/
static float calculateModeFive(float a,float b,float c,float d,int mark1,int mark2,int mark3)
{
float value1,value2,value3;
value1=calculateTwo(a,b,mark1);
value2=calculateTwo(c,d,mark3);
value3=calculateTwo(value1,value2,mark2);
return value3;
}
/*
计算传进来的四个值经过运算能否得到24
*/
int pointGame24(float a,float b,float c,float d)
{
int mark1,mark2,mark3;
for(mark1=0;mark1<4;mark1++)
{
for(mark2=0;mark2<4;mark2++)
{
for(mark3=0;mark3<4;mark3++)
{
if(calculateModeOne(a,b,c,d,mark1,mark2,mark3)==24)
{
return TURE;
}
if(calculateModeTwo(a,b,c,d,mark1,mark2,mark3)==24)
{
return TURE;
}
if(calculateModeThree(a,b,c,d,mark1,mark2,mark3)==24)
{
return TURE;
}
if(calculateModeFour(a,b,c,d,mark1,mark2,mark3)==24)
{
return TURE;
}
if(calculateModeFive(a,b,c,d,mark1,mark2,mark3)==24)
{
return TURE;
}
}
}
}
return FALSE;
}
#include<stdio.h>
#include<stdlib.h>
#include "pointGame24.h"
/*
输入函数,并对输入值进行检查
*/
static int input(int *num1,int *num2,int *num3,int *num4)
{
printf("请输入4个数字:");
scanf("%d%d%d%d",num1,num2,num3,num4);
if((*num1>=1&&*num1<=10)&&(*num2>=1&&*num2<=10)&&(*num3>=1&&*num3<=10)&&(*num4>=1&&*num4<=10))
{
return 1;
}
return 0;
}
/*
主函数,程序的入口
*/
int main()
{
int num1 = 0.0;
int num2 = 0.0;
int num3 = 0.0;
int num4 = 0.0;
if(0 == input(&num1,&num2,&num3,&num4))
{
printf("输入有问题\n");
system("pause");
return 0;
}
if(1 == pointGame24(num1,num2,num3,num4))
{
printf("ture\n");
}
else
{
printf("false\n");
}
system("pause");
return 0;
}
#ifndef _POINTGAME24_
#define _POINTGAME24_
/*****************************宏*************************************/
#define FALSE 0
#define TURE 1
/*****************************函数************************************/
int pointGame24(float a,float b,float c,float d);
#endif //_POINTGAME24_
现在还存在问题:就是int类型和float类型的转换,具体就是除法的时候会丢失精度。
转载于:https://blog.51cto.com/zhaoxiaohu/1754255