#include<math.h>
using namespace std
const double MIN=1E-6
void Print(int *Rank,double *FourNum)
{
for(int i=0i<4i++)
cout<<FourNum[Rank[i]]<<" "
cout<<endl
}
void Calculate_24(int *Rank,int *FourNum,char *Oper,int i,int j,int k,bool &def)
{
double res=0
switch(i)
{
case 0:
res=FourNum[Rank[0]]+FourNum[Rank[1]]
break
case 1:
res=FourNum[Rank[0]]-FourNum[Rank[1]]
break
case 2:
res=FourNum[Rank[0]]*FourNum[Rank[1]]
break
case 3:
res=FourNum[Rank[0]]/FourNum[Rank[1]]
break
}
switch(j)
{
case 0:
res=res+FourNum[Rank[2]]
break
case 1:
res=res-FourNum[Rank[2]]
break
case 2:
res=res*FourNum[Rank[2]]
break
case 3:
res=res/FourNum[Rank[2]]
break
}
switch(k)
{
case 0:
res=res+FourNum[Rank[3]]
break
case 1:
res=res-FourNum[Rank[3]]
break
case 2:
res=res*FourNum[Rank[3]]
break
case 3:
res=res/FourNum[Rank[3]]
break
}
if(fabs(res-24)>MIN)
return
else
{
def=true
for(int num=1num<=7num++)
{
switch(num)
{
case 1:
cout<<FourNum[Rank[0]]
break
case 3:
cout<<FourNum[Rank[1]]
break
case 5:
cout<<FourNum[Rank[2]]
break
case 7:
cout<<FourNum[Rank[3]]
break
case 2:
cout<<Oper[i]
break
case 4:
cout<<Oper[j]
break
case 6:
cout<<Oper[k]
break
}
}
cout<<endl
}
}
void SearchTree(int Depth,int *Rank,int *FourNum,char *Oper,bool &def)
{
int i,j,k
if(Depth==4)
{
for(i=0i<4i++)
for(j=0j<4j++)
for(k=0k<4k++)
Calculate_24(Rank,FourNum,Oper,i,j,k,def)
}
else
{
for(i=0i<4i++)
{
int Remember=0
for(j=0j<Depthj++)
{
if(Rank[j]==i)
Remember=1
}
if(Remember)
continue
Rank[Depth]=i
SearchTree(Depth+1,Rank,FourNum,Oper,def)
}
}
}
int main()
{
int a[4],b[4],time
char c[4]={'+','-','*','/'}
bool def=false
cin>>time
while(time--)
{
for(int i=0i<4i++)//输入测试数据
cin>>a[i]
cout<<"所有可能的结果:"<<endl
SearchTree(0,b,a,c,def)
if(def==false)
cout<<"No"<<endl
}
return 0
}
#include<cstdlib>#include<iostream>#include<ctime>using namespace stdclass CCard{private: int m_Pip[5]//一共五张牌 int m_Number//发了多少张牌 int m_Dollar//赌本 int m_Gamble//赌注 int m_Win//赢局数 int m_Lose//输局数 int m_Draw//平局数public: CCard()//构造函数。 void FirstPlayTwo()//最初的两张牌 int GetNumber()//返回牌张 int GetPip()//返回点数 void DisplayPip()//依次全部显示牌面的点数 void DisplayPip(int)//除了第一张牌,依次显示全部牌面点数(针对计算机牌的显示) void TurnPlay()//出一张牌。 void Win()//赢了计算赌注 void Lose()//输了 void Draw()//平局 int SetGamble(int)//设置赌本,赌本不够返回-1 int GetMoney()//返回钱数 void DisplayInfo()//打印必要的信息 int GetCurrentCard()//返回当前的牌点}
CCard::GetNumber(){ return m_Number}
CCard::CCard()//构造函数,初始化{ m_Number = 0m_Dollar = 100//初始赌注为100美元 for(int i=0i<5i++) m_Pip[i] = 0m_Gamble = 0m_Win = m_Lose = m_Draw = 0}
int CCard::GetMoney(){ return m_Dollar}
void CCard::DisplayInfo()//打印必要的信息{ cout<<"\n\n\n\t\t\t您一共玩了"<<m_Win+m_Lose+m_Draw<<"局 "<<"赢了"<<m_Win<<"局 "<<"输了"<<m_Lose<<"局 "<<"平局"<<m_Draw<<"次。"<<endlcout<<"\n\t\t\t\t您的赌本共计有$"<<m_Draw<<"。\n"<<endl}
int CCard::SetGamble(int gamble){ if(gamble<0) { cout<<"\n输入金额有误"<<endl return -1} if(m_Dollar-gamble<0) { cout<<"\n金额不足"<<endl return -1}else m_Gamble = gamblem_Dollar -= gamblereturn 0}
void CCard::FirstPlayTwo()//最初两张牌{ m_Pip[0] = rand()%13+1m_Pip[1] = rand()%13+1m_Number = 2}
int CCard::GetPip(){ int SumPip = 0for(int i=0i<m_Numberi++) { SumPip += m_Pip[i]} return SumPip}
void CCard::DisplayPip(){ int ifor(i=0i<m_Numberi++) { cout<<m_Pip[i]<<'\t'} cout<<endl}
void CCard::TurnPlay(){ m_Number++m_Pip[m_Number-1] = rand()%13+1}
void CCard::Win(){ cout<<"赢家牌面:"DisplayPip()cout<<"\n牌面点数:"<<GetPip()<<endlm_Dollar = m_Dollar + 2 * m_Gamblem_Win++cout<<"\n赌本:$"<<m_Dollar<<" 赢了"<<m_Win<<"次 "<<"输了"<<m_Lose<<"次 "<<"平局"<<m_Draw<<"次"<<endlcout<<endlcout<<endl}
void CCard::Lose(){ m_Lose++cout<<"\n输家的牌面:"DisplayPip()if(GetPip()>21) cout<<"\t\t\t\t\t\t\t\t暴了!"<<endlelse cout<<"牌面点数:"<<GetPip()<<endlcout<<"\n赌本:$"<<m_Dollar<<" 赢了"<<m_Win<<"次 "<<"输了"<<m_Lose<<"次 "<<"平局"<<m_Draw<<"次"<<endlcout<<endl<<endl}
void CCard::Draw(){ m_Draw++m_Dollar += m_Gamblecout<<"\n平局牌面:"DisplayPip()if(GetPip()>21) cout<<"\n暴了!"<<endlelse cout<<"牌面点数:"<<GetPip()<<endlcout<<"赌本:$"<<m_Dollar<<" 赢了"<<m_Win<<"次 "<<"输了"<<m_Lose<<"次 "<<"平局"<<m_Draw<<"次"<<endlcout<<endl<<endl}
void DisplayRule(void){cout<<endl<<endlcout<<"\t※※※※※※※※※※欢迎进入21点游戏世界!※※※※※※※※※※\n\n"cout<<"\t\t 游戏规则:\n" cout<<endlcout<<"\t\t 1.玩家最多可以要5张牌;\n"cout<<endlcout<<"\t\t 2.如果牌点数的总数超过21点则暴点,自动判数;\n"cout<<endlcout<<"\t\t 3.赢家可得双倍的赌注;\n"cout<<endlcout<<"\t\t 4.计算机方在大于等于16点时不再要牌。\n"cout<<endlcout<<"\t※※※※※※※※※※※※※ 祝您好运! ※※※※※※※※※※\n"cout<<endl<<endl}
void Judge(CCard &cpu,CCard &player){ cout<<endlif((cpu.GetPip()>21&&player.GetPip()>21)||cpu.GetPip()==player.GetPip()) { cout<<"\n\n\t\t\t\t\t\t\t\t平局!\n" cout<<"计算机数据:\t" cpu.DisplayPip() cout<<"牌面点数:"<<cpu.GetPip()<<endl cout<<"\n您的数据:\t" player.Draw() cout<<endl} else if((cpu.GetPip()>21)||(player.GetPip()>cpu.GetPip()&&player.GetPip()<=21)) { cout<<"\n\n\n\t\t\t\t\t\t\t\t恭喜您赢了!\n\n" cout<<"计算机数据:\t" cpu.DisplayPip() cout<<"牌面点数:"<<cpu.GetPip()<<endl cout<<"\n您的数据:\t" player.Win() cout<<endl } else { cout<<"\n\n\t\t\t\t\t\t\t\t很遗憾您输了!\n" cout<<"计算机数据:\t" cpu.DisplayPip() cout<<"牌面点数:"<<cpu.GetPip()<<endl cout<<"\n您的数据:\t" player.Lose() cout<<endl}}void CCard::DisplayPip(int n){ int icout<<"[*]"<<'\t'for(i=1i<m_Numberi++) cout<<m_Pip[i]<<'\t'cout<<endl}
void PlayTurn(CCard &cpu,CCard &player)//玩一局{ char chChoiceint blCpu = 1//判断是否要牌 int blPlayer = 1cpu.FirstPlayTwo()//计算机和玩家各要两张牌 player.FirstPlayTwo()do { cout<<"\n您的牌点为:\t" player.DisplayPip() cout<<"\n" cout<<"您的牌面点数是:"<<player.GetPip()<<endl cout<<"\n计算机的牌点为:\t" cpu.DisplayPip(1) if(blPlayer) { cout<<"\n\n\t您是否继续要牌(Y/N)?\t\t\t" cin>>chChoice if((chChoice == 'Y'||chChoice == 'y')) {if(player.GetNumber()<5){ player.TurnPlay()cout<<"\n您要的这张牌是:"<<player.GetPip()<<endlif(player.GetPip()>21) blPlayer = 0 }else{ cout<<"对不起,您已经要了5张牌,不能再要牌了!"blPlayer = 0 } } if(chChoice=='n'||chChoice=='N')blPlayer = 0 } if(cpu.GetPip()<16&&cpu.GetNumber()<5) { cpu.TurnPlay() cout<<"\n计算机要牌,牌点是:"<<cpu.GetPip()<<endl } else blCpu = 0 if(blCpu&&player.GetNumber()<5&&player.GetPip()<21) blPlayer = 1}while(blCpu||blPlayer)Judge(cpu,player)return }
int main(){ srand((unsigned)time(NULL))//初始化随机数种子 CCard cpu,playerint blLogicint nMoney// DisplayRule()// char chChoicecout<<"是否现在开始游戏(Y/N)?\t\t"cin>>chChoicewhile(chChoice=='Y'||chChoice=='y') { do { cout<<endl cout<<"\t\t\t您现在有的赌本:$"<<player.GetMoney() cout<<"\n\n请下注(赌注不能超过赌本);" cin>>nMoney blLogic = player.SetGamble(nMoney) if(blLogic)cout<<"您的赌本不够,请重新下注!\n" }while(blLogic) PlayTurn(cpu,player)// cout<<"是否继续21点游戏(Y/N)?\t\t\t" cin>>chChoice} player.DisplayInfo()cout<<"\t\t\t您的选择是明智的,赌博有碍家庭和睦!\n"cout<<"\n\n\t\t\t\t欢迎再次使用此程序!"<<endl<<endl<<endl
return 0}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)