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點可以考驗人的智力和數學敏感性,它能在游戲中提高人們的心算能力。