實現24點遊戲-窮舉法
演算法設計思路:
窮舉法就是列出4個數字加減乘除的各種可能性。首先我們將4個數設為a,b,c,d,,將其排序列出四個數的所有排序序列組合(共有A44=24種組合)。再進行符號的排列表示式,其中算術符號有+,—,*,/,(,)。其中有效的表示式有a*(b-c/b),a*b-c*d,等等。列出所有有效的表示式。其中a,b,c,d的範圍是1到13。用隨機函式產生四個1-13的數。要實現24點的演算法,就是通過4個數字,4個運算子號和2對括號(最多為2對),通過各種組合判斷其結果是否為24。我們用a,b,c,d代替4個數字。考慮每種可能,總的演算法就有7種可能。
1沒括號的(形如a*b*c*d);
2有括號的(形如(a * b) * c * d);
3有括號的(形如(a * b * c) * d);
4有括號的(形如a * (b * c) * d);
5有括號的(形如(a * b) * (c * d));
6有括號的(形如((a * b) * c) * d);
7有括號的(形如(a * (b * c)) * d)。
我的程式對運算式子進行窮舉,去掉等價的和無效的,最終合法表示式只有73種。
/* File name:24點遊戲.cpp Author:楊柳 Date:2017.4.5 Function list:int Calculate ( float x, float y, float z, float w) IDE:DEV-c++ */ #include <iostream> #include <stdlib.h> using namespace std; int flag=1; int main() { int Calculate ( float x, float y, float z, float w);//函式宣告 while(flag){ float a,b,c,d; int x; cout<<"隨機輸入4個資料"<<endl; a=rand()%13+1; cout<<" 第一個數:"<<a<<endl; b=rand()%13+1; cout<<" 第二個數:"<<b<<endl; c=rand()%13+1; cout<<" 第三個數:"<<c<<endl; d=rand()%13+1; cout<<" 第四個數:"<<d<<endl; cout<<"輸出所有演算法如下:"<<endl; Calculate (a,b,c,d); cout<<"退出請按0 or 繼續請按1"<<endl; cin>>x; if(x==0) flag=0; } return 0; } int Calculate ( float x, float y, float z, float w) // a .b.c.d 的所有排列組合情況和運算表示式的所有情況 { if(x*y-z+w==24) cout<<x<<"*"<<y<<"-"<<z<<"+"<<w<<"=24"<<endl; if ((x-y)*z*w==24) cout<<"("<<x<<"-"<<y<<")"<<"*"<<z<<"*"<<w<<"=24"<<endl; if ((x*y)+(z*w)==24) cout<<"("<<x<<"*"<<y<<")+("<<z<<"*"<<w<<")"<<"=24"<<endl; if ((x+y)*z*w==24) cout<<"("<<x<<"+"<<y<<")"<<"*"<<z<<"*"<<w<<")"<<"=24"<<endl; if (x*y*z*w==24) cout<<x<<"*"<<y<<"*"<<z<<"*"<<w<<"=24"<<endl; if ((x+y*z)*w==24) cout<<"("<<x<<"+"<<y<<"*"<<z<<")"<<"*"<<w<<"=24"<<endl; if ((x*y-z)*w==24) cout<<"("<<x<<"*"<<y<<"-"<<z<<")"<<"*"<<w<<"=24"<<endl; if ((x*y)+z+w==24) cout<<"("<<x<<"*"<<y<<")+"<<z<<"+"<<w<<"=24"<<endl; if ((x/y-z)*w==24) cout<<"("<<x<<"/"<<y<<"-"<<z<<")"<<"*"<<w<<"=24"<<endl; if ((x-(y-z))*w==24) cout<<"("<<x<<"-"<<"("<<y<<"-"<<z<<")"<<")*"<<w<<"=24"<<endl; if (x-(y-z-w)==24) cout<<x<<"-"<<"("<<y<<"-"<<z<<"-"<<w<<")"<<"=24"<<endl; if (x+y-(z-w)==24) cout<<x<<"+"<<y<<"-"<<"("<<z<<"-"<<w<<")"<<"=24"<<endl; if (x*(y/z-w)==24) cout<<x<<"*"<<"("<<y<<"/"<<z<<"-"<<w<<")"<<"=24"<<endl; if ((x-y*z)*w==24) cout<<"("<<x<<"-"<<y<<"*"<<z<<")"<<"*"<<w<<"=24"<<endl; if (x*(y-z)+w==24) cout<<x<<"*"<<"("<<y<<"-"<<z<<")"<<"+"<<w<<"=24"<<endl; if (x+y+z/w==24) cout<<x<<"+"<<y<<"+"<<z<<"/"<<w<<"=24"<<endl; if ((x-y)*(z-w)==24) cout<<"("<<x<<"-"<<y<<")*("<<z<<"-"<<w<<")=24"<<endl; if ((x+y)*z/w==24) cout<<"("<<x<<"+"<<y<<")*"<<z<<"/"<<w<<"=24"<<endl; if (x*y/(z-w)==24) cout<<x<<"*"<<y<<"/"<<"("<<z<<"-"<<w<<")"<<"=24"<<endl; if ((x+y)*(z+w)==24) cout<<"("<<x<<"+"<<y<<")*("<<z<<"+"<<w<<")=24"<<endl; if ((x-y)*z/w==24) cout<<"("<<x<<"-"<<y<<")*"<<z<<"/"<<w<<"=24"<<endl; if (x+(y+z)/w==24) cout<<x<<"+"<<"("<<y<<"+"<<z<<")"<<"/"<<w<<"=24"<<endl; if (x*y/(z+w)==24) cout<<x<<"*"<<y<<"/"<<z<<"+"<<w<<")"<<"=24"<<endl; if ((x+y)*z/w==24) cout<<"("<<x<<"+"<<y<<")*"<<z<<"/"<<w<<"=24"<<endl; if ((x*y+z)*w==24) cout<<"("<<x<<"*"<<y<<"+"<<z<<")"<<"*"<<w<<"=24"<<endl; if ((x*y-z)/w==24) cout<<"("<<x<<"*"<<y<<"-"<<z<<")"<<"/"<<w<<"=24"<<endl; if ((x/y+z)*w==24) cout<<"("<<x<<"/"<<y<<"+"<<z<<")"<<"*"<<w<<"=24"<<endl; if ((x*y)/z/w==24) cout<<"("<<x<<"*"<<y<<")/"<<z<<"/"<<w<<"=24"<<endl; if (x+y+z-w==24) cout<<x<<"+"<<y<<"+"<<z<<"-"<<w<<"=24"<<endl; if (x-(y-z)+w==24) cout<<x<<"-"<<"("<<y<<"-"<<z<<")"<<"+"<<w<<"=24"<<endl; if (x/(y-z/w)==24) cout<<x<<"/"<<"("<<y<<"-"<<z<<"/"<<w<<")"<<"=24"<<endl; if (x+(y-z)*w==24) cout<<x<<"+"<<"("<<y<<"-"<<z<<")*"<<w<<"=24"<<endl; if ((x+y+z)*w==24) cout<<"("<<x<<"+"<<y<<"+"<<z<<")*"<<w<<"=24"<<endl; if ((x+y+z)*w==24) cout<<"("<<x<<"+"<<y<<"+"<<z<<")*"<<w<<"=24"<<endl; if (x+y*z-w==24) cout<<x<<"+"<<y<<"*"<<z<<"-"<<w<<"=24"<<endl; if (x*y-z/w==24) cout<<x<<"*"<<y<<"-"<<z<<"/"<<w<<"=24"<<endl; if ((x+y)*z-w==24) cout<<"("<<x<<"+"<<y<<"*"<<z<<"-"<<w<<"=24"<<endl; if ((x-y/z)*w==24) cout<<"("<<x<<"-"<<y<<"/"<<z<<")*"<<w<<"=24"<<endl; if (x*(y+z)+w==24) cout<<x<<"*"<<"("<<y<<"+"<<z<<")"<<"+"<<w<<"=24"<<endl; if ((x*y)+(z/w)==24) cout<<"("<<x<<"*"<<y<<")-("<<z<<"/"<<w<<")"<<"=24"<<endl; if ((x*y)/z-w==24) cout<<"("<<x<<"*"<<y<<")/"<<z<<"-"<<w<<"=24"<<endl; if ((x+y/z)*w==24) cout<<"("<<x<<"+"<<y<<"/"<<z<<")*"<<w<<"=24"<<endl; if ((x*y*z)/w==24) cout<<"("<<x<<"*"<<y<<"*"<<z<<")/"<<w<<"=24"<<endl; if ((x+y*z)/w==24) cout<<"("<<x<<"+"<<y<<"*"<<z<<")/"<<w<<"=24"<<endl; if (x+(y*z)+w==24) cout<<x<<"+"<<"("<<y<<"*"<<z<<")+"<<w<<"=24"<<endl; if (x-(y+z)*w==24) cout<<x<<"-("<<y<<"+"<<z<<")*"<<w<<"=24"<<endl; if (x-(y-z)*w==24) cout<<x<<"-("<<y<<"-"<<z<<")*"<<w<<"=24"<<endl; if ((x*y)-z-w==24) cout<<"("<<x<<"*"<<y<<")-"<<z<<"-"<<w<<"=24"<<endl; if (x+y/z+w==24) cout<<x<<"+"<<y<<"/"<<z<<"+"<<w<<"=24"<<endl; if ((x-y)*z-w==24) cout<<"("<<x<<"-"<<y<<"*"<<z<<"-"<<w<<"=24"<<endl; if ((x+y)/z+w==24) cout<<"("<<x<<"+"<<y<<"/"<<z<<"+"<<w<<"=24"<<endl; if ((x*y)+z-w==24) cout<<"("<<x<<"*"<<y<<")+"<<z<<"-"<<w<<"=24"<<endl; if ((x/y)+z+w==24) cout<<"("<<x<<"/"<<y<<"+"<<z<<"+"<<w<<"=24"<<endl; if ((x*y)*z-w==24) cout<<"("<<x<<"*"<<y<<")*("<<z<<")-"<<w<<"=24"<<endl; if ((x*y+z)/w==24) cout<<"("<<x<<"*"<<y<<"+"<<z<<")/"<<w<<"=24"<<endl; if (x+y+z*w==24) cout<<x<<"+"<<y<<"+"<<z<<"*"<<w<<"=24"<<endl; if (x*(y-z)/w==24) cout<<x<<"*"<<"("<<y<<"-"<<z<<")/"<<w<<"=24"<<endl; if (x/y*z+w==24) cout<<x<<"/"<<y<<"*"<<z<<"+"<<w<<"=24"<<endl; if (x+y*z*w==24) cout<<x<<"+"<<y<<"*"<<z<<"*"<<w<<"=24"<<endl; if (x+y+z+w==24) cout<<x<<"+"<<y<<"+"<<z<<"+"<<w<<"=24"<<endl; if ((x*y)/(z*w)==24) cout<<"("<<x<<"*"<<y<<")/("<<z<<"*"<<w<<")"<<"=24"<<endl; if (x+(y+z)*w==24) cout<<x<<"+("<<y<<"+"<<z<<")*"<<w<<"=24"<<endl; if ((x-y)*z+w==24) cout<<"("<<x<<"-"<<y<<"*"<<z<<"+"<<w<<"=24"<<endl; if ((x+y+z)/w==24) cout<<"("<<x<<"+"<<y<<"+"<<z<<")/"<<w<<"=24"<<endl; if ((x+y)*z+w==24) cout<<"("<<x<<"+"<<y<<")*"<<z<<"+"<<w<<"=24"<<endl; if ((x*y)*z+w==24) cout<<"("<<x<<"*"<<y<<")*("<<z<<")+"<<w<<"=24"<<endl; if ((x*y)-(z-w)==24) cout<<"("<<x<<"*"<<y<<")-("<<z<<"-"<<w<<")"<<"=24"<<endl; if ((x*y)-(z+w)==24) cout<<"("<<x<<"*"<<y<<")-("<<z<<"+"<<w<<")"<<"=24"<<endl; if ((x-y-z)*w==24) cout<<"("<<x<<"-"<<y<<"-"<<z<<")*"<<w<<"=24"<<endl; if ((x*y)/z+w==24) cout<<"("<<x<<"*"<<y<<")/"<<z<<"+"<<w<<"=24"<<endl; if ((x+y-z)*w==24) cout<<"("<<x<<"+"<<y<<"-"<<z<<")*"<<w<<"=24"<<endl; if (x/(y/z-w)==24) cout<<x<<"/("<<y<<"/"<<z<<"-"<<w<<")=24"<<endl; if ((x*y)-(z*w)==24) cout<<"("<<x<<"*"<<y<<")-("<<z<<"*"<<w<<")"<<"=24"<<endl; //else //cout<<"不可以組成24"<<endl; return 0; }
最終效果圖
相關文章
- JS實現24點遊戲JS遊戲
- Python實現24點遊戲Python遊戲
- 撲克牌速算24 -窮舉(JavaScript)JavaScript
- Python如何實現窮舉搜尋?Python
- Python教程:Python如何實現窮舉搜尋?Python
- 二分法和窮舉法
- leetcode 679. 24 Game(遊戲24點)LeetCodeGAM遊戲
- 用蠻力法(窮舉法)求解冪集問題
- Oculus舉辦線上遊戲展,VR遊戲何時現拐點?遊戲VR
- C語言-for迴圈之窮舉法練習C語言
- 【窮舉】Max Points on a Line平面上共線的點
- 窮舉法解決0/1揹包問題——pythonPython
- OC中列舉寫法 以及 字串型別列舉實現探索字串型別
- VR虛擬現實遊戲所體現的亮點分析VR遊戲
- 通過窮舉法快速破解excel或word加密文件最高15位密碼Excel加密密碼
- 暴力搜尋演算法的典型應用——24點遊戲演算法遊戲
- python實現撲克遊戲 - 抽鬼牌 和 21點Python遊戲
- js實現翻牌遊戲JS遊戲
- 遊戲侵蝕現實:產業的成熟,讓遊戲技術跨入現實遊戲產業
- 語法糖甜不甜?巧用列舉實現“狀態”轉換限制
- 小鎮青年的網遊實踐與現實生活:從“遊戲即生活”到“遊戲只是遊戲”遊戲
- 遊戲企業防沉迷落實情況舉報平臺現已上線試執行遊戲
- H5實現魔方遊戲H5遊戲
- 遊戲中的陰影實現遊戲
- 在Unity實現遊戲命令模式Unity遊戲模式
- javascript實現前端小遊戲2048JavaScript前端遊戲
- 7-24 猜數字遊戲 (15分)遊戲
- 53款重點新遊鏖戰Q3:騰訊遊戲高舉IP,網易遊戲10款新作9個品類遊戲
- 《Valorant》IGN 評測 :極富深度、趣味無窮的射擊遊戲遊戲
- python例項:解決經典撲克牌遊戲 -- 四張牌湊24點 (二)Python遊戲
- python例項:解決經典撲克牌遊戲 -- 四張牌湊24點 (一)Python遊戲
- linux實現猜數字小遊戲Linux遊戲
- Android實現買賣商品小遊戲Android遊戲
- Java實現飛機大戰遊戲Java遊戲
- Python程式碼實現“FlappyBird”小遊戲PythonAPP遊戲
- JAVAEE_Servlet_24_HttpSession實現原理JavaServletHTTPSession
- 24分鐘讓AI跑起飛車類遊戲AI遊戲
- 學習工作即遊戲:遊戲化生存的現實物語遊戲
- 現在的中國遊戲圈,能有多現實?遊戲