24点游戏

一. 题目分析:
24点游戏,在生成随机数时,从1-13随机取出数字计算得出24点,每个数只能使用一次,所以对4个数进行全排列共有4!=24种排列,由于减法不符合交换律,除法不符合交换律,所以要根据括号的类型做不同的输出
需要3个四则运算符号:
a*(b*(c+d)),
(a*(b+c))d,
a
((b+c)*d),
((a+b)*c)d,
(a+b)
(c+d),

二.源代码:

#include<stdio.h>
#include<time.h>
#include<stdlib.h> 
int chu(int p,int q)   //除法运算
{
	if(p%q==0)
		return p/q;
	else
		return 111111; 
}
int fun(int i,int j,int c)    //c(局部变量)选择运算符,i,j为运算数字
{
	int s;
	switch(c)
	{
	case 1:  s=i+j;break;
	case 2:  s=i-j;break;
	case 3:  s=i*j;break;
	case 4:  s=chu(i,j);break;
	}
	return s;
}
  
void print(int c)     //c(局部变量)选择输出运算符
{
	if(c==1)printf("+");
	else if(c==2)printf("-");
	else if(c==3)printf("*");
	else printf("/");
}
 
int main()
{
	int f[4];//四个1-13的数
	int i,j,m,n,w;
	int a,b,c;//符号
	int d1,d2,d3; //每步的结果
	srand(time(NULL));   //随机生成四个数字(四张扑克牌)
	for(w=0;w<4;w++)  
	{
		f[w]=rand()%13+1;    //生成随机数范围在1~13
	}
	for(w=0;w<4;w++)
	{
		printf("%d ",f[w]);
	}
	printf("\n");
	for(i=0;i<4;i++)
		for(j=0;j<4;j++)
			if(j!=i)
				for(m=0;m<4;m++)
					if(m!=i&&m!=j)
						for(n=0;n<4;n++)
							if(n!=i&&n!=j&&n!=m)            //四个数字的位置不可重复且多重可能置换位置运算
								for(a=1;a<5;a++)        
									for(b=1;b<5;b++)
										for(c=1;c<5;c++)       //选择四个数字中间的三个运算符,皆有四种可能
										{                             //避免了对括号的思考,转化为二元运算
											d1=fun(f[i],f[j],a);     
											d2=fun(d1,f[m],b);      //用前两个数字的运算结果代替
											d3=fun(d2,f[n],c);     //同理,两两运算,递归过程
											if(d3==24)
											{
												printf("%d",f[i]);
												print(a);
												printf("%d",f[j]);
												print(b);
												printf("%d",f[m]);
												print(c);
												printf("%d=24\n",f[n]);
											}
										}
										return 0;
}

三.测试截屏:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
四.调试截屏:在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值