码迷,mamicode.com
首页 > 其他好文 > 详细

24点游戏

时间:2016-03-23 20:23:59      阅读:202      评论:0      收藏:0      [点我收藏+]

标签:24点算法

输入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类型的转换,具体就是除法的时候会丢失精度。

24点游戏

标签:24点算法

原文地址:http://zhaoxiaohu.blog.51cto.com/10778115/1754255

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!