導航:首頁 > 計算方法 > 編程讓電腦算24點的方法

編程讓電腦算24點的方法

發布時間:2024-05-29 20:42:53

⑴ 編程求計算24點的方法是什麼

解法用到的基本思想就是回溯,樹的深度為最深為4,樹的判斷分支為 加減乘除,對不滿足條件的解進行剪枝(即當前結果>=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;
}

閱讀全文

與編程讓電腦算24點的方法相關的資料

熱點內容
用什麼方法對付領導給你穿小鞋 瀏覽:350
羊奶粉食用方法 瀏覽:926
圓椒坐果的正確方法 瀏覽:250
用什麼方法可以查出妻子出軌 瀏覽:696
美的電壓力鍋使用方法指示燈在哪裡 瀏覽:779
電動車霍爾線檢測方法 瀏覽:769
人體詳細鍛煉方法 瀏覽:150
不綉鋼管道連接方法 瀏覽:531
自己如何減肥方法 瀏覽:806
訓練武磊的方法 瀏覽:831
新寶貝破零的技巧方法 瀏覽:48
xp的列印機在哪裡設置方法 瀏覽:469
高一化學我原來的方法有什麼錯誤 瀏覽:570
漢醬真假酒鑒別方法 瀏覽:97
虧電手機激活方法 瀏覽:416
補課班可以用哪些方法進行管理 瀏覽:346
listview類的常用方法 瀏覽:308
眼部精華液使用方法 瀏覽:559
塑料膨脹釘的安裝方法 瀏覽:17
小學生床簾安裝方法 瀏覽:206