计算24点小程序

//**************24点计算小程序*************    
//作者:Linx-huo    
//版本:v1.0    
//创建时间:2017/04/12
//主要功能:随机生成四个数通过加减乘除运算得到24 
//           
//****************************************  
#include<iostream.h>
#include <ctime>
#include <cstdlib>
int jjcc(int a,int b,char sig);
int calExpress(int a,int b,int c,int d);
char sig[4]={'+','-','*','/'};
bool flag=true;
int num=0;
void main()
{ 
	char t;
	int a,b,c,d,s[4],i,j,k,m;
	clock_t t1=clock();                           //产生随机数
	cout<<"计算24点的四个数为"; 
	srand((unsigned)time(NULL)); 
	a=rand()%13+1;
	b=rand()%13+1;
	c=rand()%13+1;
	d=rand()%13+1;
	cout<<a<<" "<<b<<" "<<c<<" "<<d<<endl;
	cout<<"需要帮助吗?(y/n)"<<endl;	
	if((t=cin.get())=='y')
	{
		s[0]=a;
		s[1]=b;
		s[2]=c;
		s[3]=d;
		for(i=0;i<4;i++)
			for(j=0;j<4;j++)
				for(k=0;k<4;k++)
					for(m=0;m<4;m++)
						if(i!=j && i!=k && i!=m && j!= k && j!=m && k!=m)
							if(calExpress(s[i],s[j],s[k],s[m]) ==1)
							 return;
							if (num==0)    cout << "no answer" << endl;
	}
}
int jjcc(int a,int b,char sig)                                 //计算两个数的加减乘除的结并返回
{
	switch(sig)
	{
		case'+':
			return a+b;
		case'-':
			return a-b;
		case'*':
			return a*b;
		case'/':
			if(a%b!=0)  flag=false;
			return a/b;
	}
}
int calExpress(int a, int b, int c, int d)                    //寻找满足结果为24的式子
{
	int temp1,temp2,temp3;
	for(int i=0;i<4;i++){
		for(int j=0;j<4;j++){
			for(int k=0;k<4;k++)
			{
				flag=true;
				if(i<=1)
				{
					if(j<=1)
					{
						temp1=jjcc(c,d,sig[k]);
						temp2=jjcc(a,b,sig[i]);
						temp3=jjcc(temp1,temp2,sig[j]);
						if(temp3==24&&flag==true)
						{
							num++;
							cout<<a<<sig[i]<<b<<sig[j]<<c<<sig[k]<<d<<"=24"<<endl;
							return 1;
						}
					}
					else
					{
						temp1=jjcc(b,c,sig[j]);
						temp2=jjcc(temp1,d,sig[k]);
						temp3=jjcc(a,temp2,sig[i]);
						if(temp3==24&&flag==true)
						{
							cout<<a<<sig[i]<<b<<sig[j]<<c<<sig[k]<<d<<"=24"<<endl;
							num++;
							return 1;
						}
					}
				}
				else
				{
					temp1=jjcc(a,b,sig[i]);
					if(j<=1)
					{
						temp2=jjcc(c,d,sig[k]);
						temp3 = jjcc(temp1,temp2,sig[j]);
						if(temp3 == 24&& flag == true)
						{ 
							num++;
							cout << a << sig[i] << b << sig[j] <<c << sig[k] << d << " = 24"<< endl;	
							return 1;
						}
					}
					else
					{
						temp2 = jjcc(temp1, c, sig[j]);
						temp3 = jjcc(temp2, d, sig[k]);
						if(temp3 == 24&& flag == true)
						{
							num++;
							cout << a << sig[i] << b << sig[j] <<c << sig[k] << d << " = 24"<< endl;	
						return 1;
						}

					}
				}
			}
		}
	}
	return 0;
}
					

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值