c课程设计24点游戏
1. C语言数据结构课程设计-----24点游戏
问题已解决,楼主请参照
下面的链接里有对该问题所采用的算法的详细讨论
谨祝,
学习进步
另外,虚机团上产品团购,超级便宜
2. C语言程序设计24点游戏,能算出24的运算法则的代码,很急
#include<iostream>
#include<math.h>
using namespace std;
const double MIN=1E-6;
void Print(int *Rank,double *FourNum)
{
for(int i=0;i<4;i++)
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=1;num<=7;num++)
{
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=0;i<4;i++)
for(j=0;j<4;j++)
for(k=0;k<4;k++)
Calculate_24(Rank,FourNum,Oper,i,j,k,def);
}
else
{
for(i=0;i<4;i++)
{
int Remember=0;
for(j=0;j<Depth;j++)
{
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=0;i<4;i++)//输入测试数据
cin>>a[i];
cout<<"所有可能的结果:"<<endl;
SearchTree(0,b,a,c,def);
if(def==false)
cout<<"No"<<endl;
}
return 0;
}
3. 如何用C语言编写一个24点的游戏
我可以用C++帮你编一个这样的小程序
但不知道C++算不算得上是语言?
这个程序有些笨,它无法分辨重复的牌,
只能简单进行计算。但结果是没问题的
虽然和你需要的有点出入,但是下面的小程序也算是提供一种思路吧
#include<iostream>
using namespace std;
int main(){
int i1,i2,i3,i4,v,n1,n2;
double t1,t2,t3,t4,choice[4],s1[4],s2[4][4];
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(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;
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!=i1){
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";
}
}}}
}}}}
return 0;
}
4. 24点游戏设计与实现 C语言
大概方法:
1,利用srand和rand产生四个13以内的随机整数。
2,利用堆栈校验游戏者输入算式的正确性。
5. C语言实训求:编程实现24点游戏算法
上面的程序是正确的,这题的解法用到的基本思想就是回溯,树的深度为最深为4,树的判断分支为 加减乘除,对不满足条件的解进行剪枝(即当前结果>=24),当到达递归边界(即树的深度为四时)时,即判断当前的结果是否符合条件(=24),符合即找到解,否则继续进行。
6. 如何利用C++程序编写24点游戏(有要求)
(3) 学生可自动增加新功能模块(视情况可另外加分)
由于有此条的存在...下面代码可以符合条件
#include<iostream>
#include<cmath>/*fabs()*/
#include<cstdlib>/*exit(),srand(),rand()*/
#include<vector>/*vector*/
#include<string>/*string*/
#include<ctime>/*time()*/
using namespace std;
const double Precision=1e-10;/*比较的精度*/
const double M=24;/*凑数结果*/
const int N1=13,N2=4;/*4个从1到13的数*/
const int C1=5,C2=10,C3=15,C4=20;/*盘数*/
class Gamer;/*玩家的信息*/
class Four;/*把满足条件的四个数及其符号储存起来*/
ostream& operator<<(ostream& out,const Four &obj);/*输出Four类的对象*/
double count(double a1,int b,double a2,bool& abnormal);/*计算在运算符b(b==1时,代表+;...)的作用下,数字a1与a2的运算结果*/
bool judge(double a1,int b1,double a2,int b2,double a3,int b3,double a4,int& code);/*判断是否能凑成M*/
bool judge1(double a1,int b1,double a2,int b2,double a3,int b3,double a4);/*((a1@a2)@a3)@a4*/
bool judge2(double a1,int b1,double a2,int b2,double a3,int b3,double a4);/*(a1@(a2@a3))@a4*/
bool judge3(double a1,int b1,double a2,int b2,double a3,int b3,double a4);/*(a1@a2)@(a3@a4)*/
bool judge4(double a1,int b1,double a2,int b2,double a3,int b3,double a4);/*a1@((a2@a3)@a4)*/
bool judge5(double a1,int b1,double a2,int b2,double a3,int b3,double a4);/*a1@(a2@(a3@a4))*/
void print(ostream& out,int b);//打印算符
void GameOn();
class Gamer
{
private:
int score;/*得分*/
int bout;/*盘数*/
string name;/*姓名*/
public:
Gamer(string n,int b=C1);/*设置玩家姓名,初始化分数*/
int getScore() const;
void setScore(char c);/*对玩家分数进行加减操作*/
void print() const;/*打印玩家信息*/
};
Gamer::Gamer(string n,int b)
{
name=n;
bout=b;
score=bout;/*初始分数等于盘数*/
}
int Gamer::getScore() const
{
return score;
}
void Gamer::setScore(char c)
{
switch(c)/*c='+'或'-'*/
{
case '+':score++;break;/*回答正确,加分*/
case '-':score--;break;/*回答错误,减分*/
default:cout<<"参数错误!!!"<<endl;
}
}
void Gamer::print() const
{
cout<<"玩家"<<name<<"的得分情况:"<<endl;
cout<<"盘数:"<<bout<<"\t"<<"初始分:"<<bout<<"\t"<<"最后得分:"<<score<<endl;
}
class Four
{
private:
int Sign[3];/*储存运算符*/
int Q[N2];/*储存原始顺序,即未排序前的顺序,是输出函数的依据*/
int method;/*方法的代号,记下由这四个数字得到24的一种方法(有可能有多种得到24的方法,但只选最先找到的那种方法)*/
public:
Four(int a=0,int b=0,int c=0,int d=0,int m=0,int s1=0,int s2=0,int s3=0);/*构造函数,初始化成员数据*/
void reSet(int a,int b,int c,int d,int m,int s1,int s2,int s3);
friend ostream& operator<<(ostream& out,const Four &obj);/*友元函数*/
};
Four::Four(int a,int b,int c,int d,int m,int s1,int s2,int s3)
{
Q[0]=a;
Q[1]=b;
Q[2]=c;
Q[3]=d;
method=m;
Sign[0]=s1;
Sign[1]=s2;
Sign[2]=s3;
}
void Four::reSet(int a,int b,int c,int d,int m,int s1,int s2,int s3)
{
Q[0]=a;
Q[1]=b;
Q[2]=c;
Q[3]=d;
method=m;
Sign[0]=s1;
Sign[1]=s2;
Sign[2]=s3;
}
ostream& operator<<(ostream& out,const Four &obj)
{
switch(obj.method)
{
case 1:/*((a1@a2)@a3)@a4*/
{
out<<"(("<<obj.Q[0];
print(out,obj.Sign[0]);
out<<obj.Q[1]<<")";
print(out,obj.Sign[1]);
out<<obj.Q[2]<<")";
print(out,obj.Sign[2]);
out<<obj.Q[3];
break;
}
case 2:/*(a1@(a2@a3))@a4*/
{
out<<"("<<obj.Q[0];
print(out,obj.Sign[0]);
out<<"("<<obj.Q[1];
print(out,obj.Sign[1]);
out<<obj.Q[2]<<"))";
print(out,obj.Sign[2]);
out<<obj.Q[3];
break;
}
case 3:/*(a1@a2)@(a3@a4)*/
{
out<<"("<<obj.Q[0];
print(out,obj.Sign[0]);
out<<obj.Q[1]<<")";
print(out,obj.Sign[1]);
out<<"("<<obj.Q[2];
print(out,obj.Sign[2]);
out<<obj.Q[3]<<")";
break;
}
case 4:/*a1@((a2@a3)@a4)*/
{
out<<obj.Q[0];
print(out,obj.Sign[0]);
out<<"(("<<obj.Q[1];
print(out,obj.Sign[1]);
out<<obj.Q[2]<<")";
print(out,obj.Sign[2]);
out<<obj.Q[3]<<")";
break;
}
case 5:/*a1@(a2@(a3@a4))*/
{
out<<obj.Q[0];
print(out,obj.Sign[0]);
out<<"("<<obj.Q[1];
print(out,obj.Sign[1]);
out<<"("<<obj.Q[2];
print(out,obj.Sign[2]);
out<<obj.Q[3]<<"))";
break;
}
default:out<<"方法代码参数错误!!!";
}
out<<"="<<M;
return out;
}
double count(double a1,int b,double a2,bool& abnormal)/*最基本的运算单元*/
{
switch(b)
{
case 1:return a1+a2;
case 2:return a1-a2;
case 3:return a1*a2;
case 4:
{
if(a2==0)
{
abnormal=true;/*被除数为0,出错了*/
return 0;
}
else
return a1/a2;
}
default:cout<<"代数运算符标志(参数b)错误!!!"<<endl;exit(1);
}
}
bool judge(double a1,int b1,double a2,int b2,double a3,int b3,double a4,int& code)/*判断,统等各种可能*/
{
if(judge1(a1,b1,a2,b2,a3,b3,a4)==true)
{
code=1;/*利用引用,获取方法信息*/
return true;/*找到一种即退出*/
}
if(judge2(a1,b1,a2,b2,a3,b3,a4)==true)
{
code=2;
return true;
}
if(judge3(a1,b1,a2,b2,a3,b3,a4)==true)
{
code=3;
return true;
}
if(judge4(a1,b1,a2,b2,a3,b3,a4)==true)
{
code=4;
return true;
}
if(judge5(a1,b1,a2,b2,a3,b3,a4)==true)
{
code=5;
return true;
}
return false;
}
bool judge1(double a1,int b1,double a2,int b2,double a3,int b3,double a4)/*((a1@a2)@a3)@a4*/
{
bool abnormal=false;/*接收出错信息,若abnormal==true,一票否决*/
double result;
result=count(a1,b1,a2,abnormal);/*按括号的位置,决定运算顺序*/
result=count(result,b2,a3,abnormal);
result=count(result,b3,a4,abnormal);
if(abnormal==false&&fabs(result-M)<Precision)/*不要用result==M作条件,因为二者为浮点型*/
return true;
else
return false;
}
bool judge2(double a1,int b1,double a2,int b2,double a3,int b3,double a4)/*(a1@(a2@a3))@a4*/
{
bool abnormal=false;
double result;
result=count(a2,b2,a3,abnormal);
result=count(a1,b1,result,abnormal);
result=count(result,b3,a4,abnormal);
if(abnormal==false&&fabs(result-M)<Precision)
return true;
else
return false;
}
bool judge3(double a1,int b1,double a2,int b2,double a3,int b3,double a4)/*(a1@a2)@(a3@a4)*/
{
bool abnormal=false;
double result1,result2;
result1=count(a1,b1,a2,abnormal);
result2=count(a3,b3,a4,abnormal);
result2=count(result1,b2,result2,abnormal);
if(abnormal==false&&fabs(result2-M)<Precision)
return true;
else
return false;;
}
bool judge4(double a1,int b1,double a2,int b2,double a3,int b3,double a4)/*a1@((a2@a3)@a4)*/
{
bool abnormal=false;
double result;
result=count(a2,b2,a3,abnormal);
result=count(result,b3,a4,abnormal);
result=count(a1,b1,result,abnormal);
if(abnormal==false&&fabs(result-M)<Precision)
return true;
else
return false;
}
bool judge5(double a1,int b1,double a2,int b2,double a3,int b3,double a4)/*a1@(a2@(a3@a4))*/
{
bool abnormal=false;
double result;
result=count(a3,b3,a4,abnormal);
result=count(a2,b2,result,abnormal);
result=count(a1,b1,result,abnormal);
if(abnormal==false&&fabs(result-M)<Precision)
return true;
else
return false;
}
void print(ostream& out,int b)
{
switch(b)/*b=1,2,3,4*/
{
case 1:out<<"+";break;
case 2:out<<"-";break;
case 3:out<<"*";break;
case 4:out<<"/";break;
default:cerr<<"算符参数错误!"<<endl;
}
}
void GameOn()
{
string name;/*玩家姓名*/
cout<<"请输入玩家姓名:";
cin>>name;
int frequence=0;/*已玩的盘数*/
int Max=C1;/*总盘数*/
char request='A';/*盘数设置信息*/
cout<<"选择游戏盘数:A."<<C1<<" B."<<C2<<" C."<<C3<<" D."<<C4<<":";
cin>>request;
Four temp;
switch(request)
{
case 'A':
case 'a':Max=5;break;
case 'B':
case 'b':Max=10;break;
case 'C':
case 'c':Max=15;break;
case 'D':
case 'd':Max=20;break;
default:cout<<"输入选项不存在!设为默认值:A.5"<<endl;Max=5;
}
Gamer gamer(name,Max);/*设置玩家信息*/
int i,j,k,l,i1,j1,k1;/*计数器*/
int code=0;/*方法标记*/
//int itag,jtag,ktag,ltag;/*在一定运算下的各数标记*/
double P[N2];/*储存组合*/
int tag=0;/*跳出循环及是否有解的标志*/
char answer1='N';/*玩家的答案*/
bool answer2=false;/*玩家的答案(answer1的逻辑化)*/
while(frequence<Max)
{
cout<<"当前盘数/总盘数:"<<frequence+1<<"/"<<Max<<" 当前积分/初始积分:"<<gamer.getScore()<<"/"<<Max<<endl;/*当前盘数与总盘数*/
srand((unsigned)time(NULL));/*随机数种子*/
for(i=0;i<N2;i++)
{
P[i]=double(rand()%N1+1);/*产生1~N1之间的随机数*/
cout<<P[i]<<"\t";
}
cout<<"此组合是否能能过四则运算及括号得到24?"<<endl;
cout<<"Y.能 N.不能 :";
cin>>answer1;
switch(answer1)
{
case 'Y':
case 'y':answer2=true;break;
case 'N':
case 'n':answer2=false;break;
default:cout<<"输入选项不存在!设为默认值N.不能"<<endl;answer2=false;
}
for(i=0;i<N2;i++)
{
if(tag==1)/*一层一层地跳出,也可以直接用goto语法*/
break;
for(j=0;j<N2;j++)
{
if(tag==1)
break;
for(k=0;k<N2;k++)
{
if(tag==1)
break;
l=(0+N2-1)*N2/2-(i+j+k);/*i+j+k+l=0+1+...+N2*/
if((i!=j)&&(i!=k)&&(j!=k))/*注意条件的写法!!!*/
{
for(i1=1;i1<=N2;i1++)
{
if(tag==1)
break;
for(j1=1;j1<=N2;j1++)
{
if(tag==1)
break;
for(k1=1;k1<=N2;k1++)
{
if(judge(P[i],i1,P[j],j1,P[k],k1,P[l],code)==true)
{
temp.reSet(static_cast<int>(P[i]),static_cast<int>(P[j]),static_cast<int>(P[k]),static_cast<int>(P[l]),code,i1,j1,k1);/*封装数据*/
tag=1;
break;/*跳出*/
}
}
}
}
}
}
}
}
if(tag==0)/*无解*/
{
if(answer2==false)
{
cout<<"正确!此组合不能得到24."<<endl;
gamer.setScore('+');
}
else
{
cout<<"错误!此组合不能得到24!!!"<<endl;
gamer.setScore('-');
}
}
else/*有解*/
{
if(answer2==true)
{
cout<<"正确!此组合能得到24."<<endl;
gamer.setScore('+');
cout<<"比如:"<<temp<<endl;
}
else
{
cout<<"错误!此组合能得到24!!!"<<endl;
gamer.setScore('-');
cout<<"比如:"<<temp<<endl;
}
}
tag=0;/*清零*/
cout<<endl;
frequence++;/*进入下一盘*/
}
gamer.print();/*打印玩家信息*/
}
int main()
{
GameOn();
system("pause");
return 0;
}
7. 编程C语言 24点游戏
{
内printf("%-5d%-8s%-6s%-13s%-15s%-15s\n",per[i-1].score,per[i-1].name,per[i-1].age,per[i-1].num,per[i-1].adds,per[i-1].email);
容if(i>1&&i%10==0)
{
printf("\t-----------------------------------\n");
printf("\t");
system("pause");
printf("\t-----------------------------------\n");
}
}
8. 数据结构课程设计----24点游戏
//你看一下,下面这段代码,可能对你有帮助:
#include<stdio.h>
#include<conio.h>
#include <stdlib.h>
int fun(int a,int b,int c,int d);
//4个数求点的穷举算法
int main(){
int i=0,j=0,a[4];
char ch2,ch1,ch;
for(;;){
printf("Chose method: input(I) OR random(R) OR EXIT(Q)\n");
ch1=getch();
if(ch1=='q'||ch1=='Q')break;
else if(ch1=='R'||ch1=='r')
for(i=0;i<4;i++)a[i]=rand()%13+1;
else
for(i=0;i<4;i++){
printf("\nNO.%d:",i+1);
scanf("%d",&a[i]);
if(a[i]<1||a[i]>13)
return main();
}
printf("\n\tthe 4 numbers are:");
for(i=0;i<4;i++) printf("%d,",a[i]);
printf("\n\n\tget way to 24(or:-24)\n");
if(ch2=getch())
j=fun(a[0],a[1],a[2],a[3]);
if(j==0)printf("\n\n\tNO ANSWERS!\n\n");
else printf("\n\n\tThere are %d ways to 24(or -24):\n\n\n\n",j);
scanf("%c",&ch);
}
}
int fun(int a,int b,int c,int d){
int flag=0,time=0;
int i=0,j=0,k=0,a_b,temp;
char ch[4];
while(time<6){
for(i=0;i<4;i++){
if(i<3){
if(i==0){a_b=a+b;ch[i]='+';}
if(i==1){a_b=a-b;ch[i]='-';}
if(i==2){a_b=a*b;ch[i]='*';}
{
if(a_b+c+d==24){printf("\n%d%c%d+%d+%d=24",a,ch[i],b,c,d);flag++;}
if(a_b+c-d==24){printf("\n%d%c%d+%d-%d=24",a,ch[i],b,c,d);flag++;}
if(a_b-c+d==24){printf("\n%d%c%d-%d+%d=24",a,ch[i],b,c,d);flag++;}
if(a_b-c+d==-24){printf("\n%d%c%d-%d+%d=-24",a,ch[i],b,c,d);flag++;}
if(a_b-c-d==24){printf("\n%d%c%d-%d-%d=24",a,ch[i],b,c,d);flag++;}
if(a_b-c-d==-24){printf("\n%d%c%d-%d-%d=24",a,ch[i],b,c,d);flag++;}
if((a_b)+c*d==24){printf("\n(%d%c%d)+%d*%d=24",a,ch[i],b,c,d);flag++;}
if((a_b)-c*d==24){printf("\n(%d%c%d)-%d*%d=24",a,ch[i],b,c,d);flag++;}
if((a_b)*(c+d)==24){printf("\n(%d%c%d)*(%d+%d)=24",a,ch[i],b,c,d);flag++;}
if((a_b)*(c+d)==-24){printf("\n(%d%c%d)*(%d+%d)=-24",a,ch[i],b,c,d);flag++;}
if((a_b)==24*(c+d)){printf("\n(%d%c%d)/(%d+%d)=24",a,ch[i],b,c,d);flag++;}
for(j=0;j<2;j++){
if((a_b)*c+d==24){printf("\n(%d%c%d)*%d+%d=24",a,ch[i],b,c,d);flag++;}
if((a_b)*c+d==-24){printf("\n(%d%c%d)*%d+%d=-24",a,ch[i],b,c,d);flag++;}
if((a_b)*c-d==24){printf("\n(%d%c%d)*%d-%d=24",a,ch[i],b,c,d);flag++;}
if((a_b)*c-d==-24){printf("\n(%d%c%d)*%d-%d=-24",a,ch[i],b,c,d);flag++;}
if((a_b)*(c-d)==24){printf("\n(%d%c%d)*(%d-%d)=24",a,ch[i],b,c,d);flag++;}
if(a_b&&(a_b)==24*(c-d)){printf("\n(%d%c%d)/(%d-%d)=24",a,ch[i],b,c,d);flag++;}
if((a_b)*c*d==24){printf("\n(%d%c%d)*%d*%d=24",a,ch[i],b,c,d);flag++;}
if((a_b)*c*d==-24){printf("\n(%d%c%d)*%d*%d=-24",a,ch[i],b,c,d);flag++;}
if((a_b)==24*c*d){printf("\n(%d%c%d)/(%d*%d)=24",a,ch[i],b,c,d);flag++;}
if((a_b)*c==24*d){printf("\n(%d%c%d)*%d/%d=24",a,ch[i],b,c,d);flag++;}
if((a_b)==-24*c*d){printf("\n(%d%c%d)/(%d*%d)=-24",a,ch[i],b,c,d);flag++;}
if((a_b)*c==-24*d){printf("\n(%d%c%d)*%d/%d=-24",a,ch[i],b,c,d);flag++;}
if((a_b)+d*c==24*c){printf("\n(%d%c%d)/%d+%d=24",a,ch[i],b,c,d);flag++;}
if((a_b)-d*c==24*c){printf("\n(%d%c%d)/%d-%d=24",a,ch[i],b,c,d);flag++;}
if((a_b-c)*d==24){printf("\n(%d%c%d+%d)*%d=24",a,ch[i],b,c,d);flag++;}
if((a_b+c)*d==24){printf("\n(%d%c%d+%d)*%d=24",a,ch[i],b,c,d);flag++;}
if((a_b-c)*d==-24){printf("\n(%d%c%d+%d)*%d=-24",a,ch[i],b,c,d);flag++;}
if((a_b+c)*d==-24){printf("\n(%d%c%d+%d)*%d=-24",a,ch[i],b,c,d);flag++;}
if((a_b+c)==24*d){printf("\n(%d%c%d+%d)/%d=24",a,ch[i],b,c,d);flag++;}
if((a_b-c)==24*d){printf("\n(%d%c%d+%d)/%d=24",a,ch[i],b,c,d);flag++;}
if(c!=d){temp=c;c=d;d=temp;}
else break;
}
}
}
if(i==3)for(k=0;k<2;k++){a_b=a;ch[i]='/';
if(a_b+(c+d)*b==24*b){printf("\n%d%c%d+%d+%d=24",a,ch[i],b,c,d);flag++;}
if(a_b-(c+d)*b==-24*b){printf("\n%d%c%d-(%d+%d)=24",a,ch[i],b,c,d);flag++;}
if(a_b+(c-d)*b==24*b){printf("\n%d%c%d+(%d-%d)=24",a,ch[i],b,c,d);flag++;}
if(a_b+(c-d)*b==-24*b){printf("\n%d%c%d+(%d-%d)=24",a,ch[i],b,c,d);flag++;}
if(a_b-(c-d)*b==24*b){printf("\n%d%c%d-%d-%d=24",a,ch[i],b,c,d);flag++;}
if(a_b-(c-d)*b==-24*b){printf("\n%d%c%d-%d-%d=-24",a,ch[i],b,c,d);flag++;}
if((a_b)*(c+d)==24*b){printf("\n(%d%c%d)*(%d+%d)=24",a,ch[i],b,c,d);flag++;}
if((a_b)+d*c*b==24*b){printf("\n(%d%c%d)/%d+%d=24",a,ch[i],b,c,d);flag++;}
if((a_b)-d*c*b==-24*b){printf("\n(%d%c%d)/%d-%d=24",a,ch[i],b,c,d);flag++;}
if(a_b*c*b==24*b){printf("\n(%d%c%d*%d*%d=24",a,ch[i],b,c,d);flag++;}
for(j=0;j<2;j++){
if((a_b)*c+d*b==24*b){printf("\n(%d%c%d)*%d+%d=24",a,ch[i],b,c,d);flag++;}
if((a_b)*c-d*b==24*b){printf("\n(%d%c%d)*%d-%d=-24",a,ch[i],b,c,d);flag++;}
if((a_b)*(c-d)==24*b){printf("\n(%d%c%d)*(%d-%d)=24",a,ch[i],b,c,d);flag++;}
if((a_b)+d*c*b==24*c*b){printf("\n(%d%c%d)/%d-%d=24",a,ch[i],b,c,d);flag++;}
if((a_b-c*b)*d==24*b){printf("\n(%d%c%d-%d)*%d=24",a,ch[i],b,c,d);flag++;}
if((a_b-c*b)*d==-24*b){printf("\n(%d%c%d-%d)*%d=-24",a,ch[i],b,c,d);flag++;}
if((a_b+c*b)*d==24*b){printf("\n(%d%c%d+%d)*%d=24",a,ch[i],b,c,d);flag++;}
if((a_b+c*b)==24*d*b){printf("\n(%d%c%d+%d)/%d=24",a,ch[i],b,c,d);flag++;}
if((a_b-c*b)==24*d*b){printf("\n(%d%c%d+%d)/%d=24",a,ch[i],b,c,d);flag++;}
if(a_b*c==24*b*d){printf("\n(%d%c%d*%d*%d=24",a,ch[i],b,c,d);flag++;}
if(c!=d){temp=c;c=d;d=temp;}
else break;
}temp=a;a=b;b=temp;
}
}
if(time==0){temp=b;b=c;c=temp;if(b==c)time++;}
if(time==1){temp=b;b=d;d=temp;if(b==d)time++;}
if(time==2){temp=a;a=c;c=temp;if(a==c)time++;}
if(time==3){temp=a;a=d;d=temp;if(a==d)time++;}
if(time==4){temp=b;b=d;d=temp;if(b==d)time++;}
if(time==5){temp=a;a=c;c=temp;}
time++;
}
return flag;
}
9. 用C语言设计算法完成24点游戏的计算是什么
计算的情况举例如下。
1:四个数是A,B,C,D,然后将A,B,C,D的各种预算结果列举出回来。
2:A+B+C+D2、B-C+A*D3、(A+D)*C+B像这样没答有规律的列举电脑是无法完成的,只有靠人工来完成,主要是运算的顺序,数字的顺序相对简单些。
3:只需要在改变参数位置就可以了,主要是运算要考虑优先级,而数字没有优先级。
4:24点是一种益智游戏,24点是把4个整数(一般是正整数)通过加减乘除以及括号运算,使最后的计算结果是24的一个数学游戏,24点可以考验人的智力和数学敏感性,它能在游戏中提高人们的心算能力。