问题:计算24点(加、减、乘、除、括号)玩法:从扑克中任意抽出四张(数字表示为1-13),用加、减、乘、除的方法使结果成为24,每张牌只能用一次。输入表达式,计算结果为24则正确。要求用VC++做,有源代码和其他文件请各位高手帮帮小弟的忙。。。。
你好 下面的小程序有一些笨(语法很简单) 它无法分辨一些重复的情况 但结果还是基本正确的
#include<iostream> using namespace std;
int main(){ int i1,i2,i3,i4,v,n1,n2; int num=0; int a,b; double t1,t2,t3,t4,choice[4],s1[4],s2[4][4],s3[2],t; for(;;){ cout<<"########################## 二十四点 ###################################\n友情提示:A=1,J=11,Q=12,K=13\n"; cout<<"请给出你抽到的第一牌:"; cin>>choice[0]; cout<<"请给出你抽到的第二牌:"; cin>>choice[1]; cout<<"请给出你抽到的第三牌:"; cin>>choice[2]; cout<<"请给出你抽到的第四牌:"; cin>>choice[3]; cout<<"########################## THINKING ###################################\n";
for(b=0;b<=2;b++) for(a=3;a>=1+b;a--)if(choice[a]<choice[a-1]){ t=choice[a-1]; choice[a-1]=choice[a]; choice[a]=t;}
for(int j=0;j<4;j++)cout<<j+1<<". "<<choice[j]<<" "; cout<<"\n";
for(i1=0;i1<4;i1++){ t1=choice[i1]; for(i2=0;i2<4;i2++){ if((i1-1)!=0 && t1==choice[i1-1])break; if(i2!=i1){ t2=choice[i2]; s1[0]=t1+t2; s1[1]=t1-t2; s1[2]=t1*t2; s1[3]=t1/t2; for(i3=0;i3<4;i3++){ if(i3!=i1&&i3!=i2){ t3=choice[i3]; for(v=0;v<4;v++) {s2[v][0]=s1[v]+t3; s2[v][1]=s1[v]-t3; s2[v][2]=s1[v]*t3; s2[v][3]=s1[v]/t3;} for(i4=0;i4<4;i4++){ if(i4!=i1&&i4!=i2&&i4!=i3){ t4=choice[i4]; for(n1=0;n1<4;n1++)for(n2=0;n2<4;n2++) if(s2[n1][n2]+t4==24||s2[n1][n2]-t4==24||s2[n1][n2]*t4==24||s2[n1][n2]/t4==24){ cout<<"找到一种组合方案:\n(("<<t1;
if(s1[n1]==t1+t2)cout<<" + "; if(s1[n1]==t1-t2)cout<<" - "; if(s1[n1]==t1*t2)cout<<" * "; if(s1[n1]==t1/t2)cout<<" / ";
if(n2==0)cout<<t2<<") + "<<t3; if(n2==1)cout<<t2<<") - "<<t3; if(n2==2)cout<<t2<<") * "<<t3; if(n2==3)cout<<t2<<") / "<<t3; if(s2[n1][n2]+t4==24)cout<<") + "<<t4<<" = 24 \n"; if(s2[n1][n2]-t4==24)cout<<") - "<<t4<<" = 24 \n"; if(s2[n1][n2]*t4==24)cout<<") * "<<t4<<" = 24 \n"; if(s2[n1][n2]/t4==24)cout<<") / "<<t4<<" = 24 \n"; num++; }
}}} }}}}
for(i1=0;i1<4;i1++){ t1=choice[i1]; for(i2=0;i2<4;i2++){ if(i2!=i1){ t2=choice[i2]; s1[0]=t1*t2; s1[1]=t1/t2; for(i3=0;i3<4;i3++){ if(i3!=i1&&i3!=i2){ t3=choice[i3];
for(i4=0;i4<4;i4++){ if(i4!=i1&&i4!=i2&&i4!=i3){ t4=choice[i4]; s3[0]=t3*t4; s3[1]=t3/t4;
for(n1=0;n1<2;n1++)for(n2=0;n2<2;n2++) if(s1[n1]+s3[n2]==24||s1[n1]-s3[n2]==24){ cout<<"找到一种组合方案:\n("<<t1;
if(s1[n1]==t1*t2)cout<<" * "; if(s1[n1]==t1/t2)cout<<" / ";
if(s1[n1]+s3[n2]==24)cout<<t2<<") + ("<<t3; if(s1[n1]-s3[n2]==24)cout<<t2<<") - ("<<t3;
if(s3[n2]==t3*t4)cout<<" * "<<t4<<") = 24 \n"; if(s3[n2]==t3/t4)cout<<" / "<<t4<<") = 24 \n";
num++; }
}}} }}}}
cout<<"总共有"<<num<<"种解法。\n"; if(num==0)cout<<"这四张牌无法构成24点~~~\n"; num=0; } return 0; } 如果你对计算24点(加、减、乘、除、括号)玩法:从扑克中任意抽出四张(数字表示为1-13),用加、减、乘、除的方法使结果成为24,每张牌只能用一次。输入表达式,计算结果为24则正确。要求用VC++做,有源代码和其他文件请各位高手帮帮小弟的忙。。。。这个问题有好的意见或
建议,请留言
|