⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 unit1.cpp

📁 用C++Bulider编写的24点数字游戏的算法
💻 CPP
字号:
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop
#include<stdio.h>
#include<math.h>
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------

int temp=0;
int x=1;
void TForm1::main()
{

	int i,j,k,t,again,res,flag;
        i=StrToInt(edt1->Text);
        j=StrToInt(edt2->Text);
        k=StrToInt(edt3->Text);
        t=StrToInt(edt4->Text);
	again=1;
        lbl2->Caption="请输入4个(1~13)的数字:";
        res=treat(i,j,k,t);
        //;
	if (res==0)

        mmo1->Lines->Add("没有答案");

	//else ;
        //mmo1->Lines->Add("Go on");
}
int TForm1::treat(float a,float b,float c,float d)
{
        temp=0;
	int i,j,k;
        String aa;
	float sum1,sum2,sum3;
	for (i=0;i<4;i++)
		for (j=0;j<6;j++)
			for (k=0;k<6;k++)
			{
				if ((!(i==3 && b==0)) && (!(j==3 && c==0)) && (!(k==3 && d==0)))
				{
					sum1=myF(i,a,b);
					sum2=myF(j,sum1,c);
					sum3=myF(k,sum2,d);
					if (fabs(sum3-24)<0.1)
					{
						temp++;
						myPrint(1,i,j,k,a,b,c,d);
					//	aa.printf ("sum1:myF(%d,%2.0f,%2.0f)  sum1=%f\n",i,a,b,sum1);
					//	aa.printf ("sum2:myF(%d,%2.0f,%2.0f)  sum2=%f\n",j,c,d,sum2);
					//	aa.printf ("1:myF(%d,myF(%d,myF(%d,%2.0f,%2.0f),%2.0f),%2.0f)   sum3=%f\n\n",k,j,i,a,b,c,d,sum3);
					}
				}
				if (k==2)
				{
					sum1=myF(i,a,b);
					sum2=myF(j,c,d);
					sum3=sum1*sum2;
				 	if (fabs(sum3-24)<0.1)
					{
						temp++;
						myPrint(2,i,j,k,a,b,c,d);
					//	aa.printf ("sum1:myF(%d,%2.0f,%2.0f)  sum1=%f\n",i,a,b,sum1);
					//	aa.printf ("sum2:myF(%d,%2.0f,%2.0f)  sum2=%f\n",j,c,d,sum2);
					//	aa.printf ("2:myF(%d,myF(%d,%2.0f,%2.0f),myF(%d,%2.0f,%2.0f))   sum3=%f\n\n",k,i,a,b,j,c,d,sum3);
					}
				}

				if (k==3)
				{
					sum1=myF(i,a,b);
					sum2=myF(j,c,d);
					if (sum2!=0)
					{
						sum3=sum1/sum2;
				 		if (fabs(sum3-24)<0.1)
						{
							temp++;
							myPrint(3,i,j,k,a,b,c,d);
						//	aa.printf ("sum1:myF(%d,%2.0f,%2.0f)  sum1=%f\n",i,a,b,sum1);
						//	aa.printf ("sum2:myF(%d,%2.0f,%2.0f)  sum2=%f\n",j,c,d,sum2);
						//	aa.printf ("3:myF(%d,myF(%d,%2.0f,%2.0f),myF(%d,%2.0f,%2.0f))   sum3=%f\n\n",k,i,a,b,j,c,d,sum3);
						}
					}
				}
			}
	if (temp==0)
		return 0;
	else
		return 1;
}
float TForm1::myF(int flag,float m,float n)
{
//	time++;
	if (flag==0)
		return (m+n);
	if (flag==1)
		return (m-n);
	if (flag==2)
		return (m*n);
	if (flag==3)
		if (n==0)
			return 30000;
		else
			return (m/n);
	if (flag==4)
		return (n-m);
	if (flag==5)
		if (m==0)
			return 30000;
		else
			return (n/m);
	return 0;
}
void TForm1::myPrint(int type,int i,int j,int k,float a,float b,float c,float d)
{

        AnsiString aa,bb;
	char sigle[6];
		sigle[0]='+';
		sigle[1]='-';
		sigle[2]='*';
		sigle[3]='/';
		sigle[4]='-';
		sigle[5]='/';
	if (type==1){
		if(j==4 || j==5)
		{
			if (k==4 || k==5)
				aa.printf("%2.0f %c (%2.0f %c (%2.0f %c %2.0f)) =24\n",d,sigle[k],c,sigle[j],a,sigle[i],b);
			else
				aa.printf("(%2.0f %c (%2.0f %c %2.0f)) %c %2.0f =24\n",c,sigle[j],a,sigle[i],b,sigle[k],d);
		}
		else if (k==4 || k==5)
		{
			aa.printf("%2.0f %c ((%2.0f %c %2.0f) %c %2.0f) =24\n",d,sigle[k],a,sigle[i],b,sigle[j],c);
		}
		else
			aa.printf("((%2.0f %c %2.0f) %c %2.0f) %c %2.0f =24\n",a,sigle[i],b,sigle[j],c,sigle[k],d);
	}
	if (type==2 || type==3)
	{

			aa.printf("(%2.0f %c %2.0f) %c (%2.0f %c %2.0f) =24\n",a,sigle[i],b,sigle[k],c,sigle[j],d);
	}
        bb="解法"+IntToStr(x)+":: "+aa;

        mmo1->Lines->Add(bb);
        x++;
}
void __fastcall TForm1::btn2Click(TObject *Sender)
{
x=1;

mmo1->Lines->Clear();
main();          
}
//---------------------------------------------------------------------------
void __fastcall TForm1::btn1Click(TObject *Sender)
{
btn2->Enabled=true;
int a=0,b=0,c=0,d=0;
while(a==0)
{
a=random(14);
edt1->Text=IntToStr(a);
}
while(b==0)
{
b=random(14);
edt2->Text=IntToStr(b);
}
while(c==0)
{
c=random(14);
edt3->Text=IntToStr(c);
}
while(d==0)
{
d=random(14);
edt4->Text=IntToStr(d);
}
}
//---------------------------------------------------------------------------

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -