實現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; }
最終效果圖
相關文章
- 撲克牌速算24 -窮舉(JavaScript)JavaScript
- JS實現24點遊戲JS遊戲
- Python實現24點遊戲Python遊戲
- Python如何實現窮舉搜尋?Python
- Python教程:Python如何實現窮舉搜尋?Python
- 窮舉法解決0/1揹包問題——pythonPython
- leetcode 679. 24 Game(遊戲24點)LeetCodeGAM遊戲
- Oculus舉辦線上遊戲展,VR遊戲何時現拐點?遊戲VR
- 窮舉密碼演算法 (轉)密碼演算法
- 24點遊戲探秘系列7: 24點無解局面清單 (轉)遊戲
- 24點遊戲探秘系列6:用機率統計的眼光看24點遊戲 (轉)遊戲
- OC中列舉寫法 以及 字串型別列舉實現探索字串型別
- 通過窮舉法快速破解excel或word加密文件最高15位密碼Excel加密密碼
- №窮舉密碼演算法指要(原始碼) (轉)密碼演算法原始碼
- 列舉GCRoots的實現GC
- C++實現http下載 && 24點計算編碼風格C++HTTP
- 語法糖甜不甜?巧用列舉實現“狀態”轉換限制
- Crowdstar:舉例分析女性遊戲與嚴肅遊戲不同特點遊戲
- 暴力搜尋演算法的典型應用——24點遊戲演算法遊戲
- VR虛擬現實遊戲所體現的亮點分析VR遊戲
- 【演算法框架套路】回溯演算法(暴力窮舉的藝術)演算法框架
- JAVAEE_Servlet_24_HttpSession實現原理JavaServletHTTPSession
- 遞迴實現指數型列舉遞迴
- js模擬實現列舉效果JS
- C#中實現列舉數C#
- Java 利用列舉實現單例模式Java單例模式
- 透過列舉enum實現單例單例
- c++11 實現列舉值到列舉名的轉換C++
- 如何實現7*24小時慢直播應用?
- Base24編碼以及解碼的實現
- Go實現Raft第二篇:選舉GoRaft
- Go 實現 Raft 第二篇:選舉GoRaft
- 7.1 實現程式記憶體塊列舉記憶體
- 小技巧分享:在 Go 如何實現列舉?Go
- c++介面定義及實現舉例C++
- 舉例闡述利用“心流狀態”設計遊戲的要點遊戲
- 在虛擬現實中解謎,PSVR遊戲《Statik》將於4月24日正式發售VR遊戲
- 遊戲企業防沉迷落實情況舉報平臺現已上線試執行遊戲