24點演算法

2021-06-14 09:26:32 字數 1494 閱讀 2325

/*

給定四個數,計算這四個數(1-13)的'+','-','*','/'能不能得到24(佔時只實現滿足一種情況就列印)

方法:窮舉法

思路:有兩種方式,(1)"連貫式計算"(2)"分隔式計算"

(1)連貫式計算、例如對於2+4*3+5的計算,2+4=6 => 6*3=18 => 18+5=23 (2+4)*3+5

(2)分隔式計算、例如對於2+4*3+5的計算,2+4=6 => 3+5=8 => 6*8=48 (2+4)*(3+5)

calc_24()方法,用三個for迴圈對四個數進行排列,又用三個for對三個符號進行迴圈,

因為符號可以重複,所以每個符號都有四種選擇。呼叫calc_consecutive方法和cale_separate

方法判斷是否為24.

calc_consecutive()方法,計算連貫式的結果,就是每兩個兩個的計算,從左向右

cale_separate()方法,計算分隔式的結果,就是先前兩個的結果,然後後兩個,最後一起的結果。

這兩上方法都會呼叫calc()方法,來計算兩個數的結果,要對結果進行判斷,比如相減的結果要

大於0,相除時,除數不能為0,並且不能有餘數。

add_parenthesis()方法是加括號

get_consecutive_exp()方法對連貫式加括號,因為我們是用0,1,2,3,分別表示「+」,"-","*","/"

所以if(oper[0]<2 && oper[1]>=2)這句話是判斷第乙個操作符是"+"或"-",然後第二個操作符是"*"或"/",

因為第二個操作符的優先順序比較高,所以前兩個數字要加括號

get_separate_exp()方法是對分隔式加括號,這種比較簡單,直接前兩個,後兩個加括號就可以了 */

#include #include #include #include using namespace std;

char operator_char_def[4]=;

int count=0;

int calc(int n1,int n2,char oper)

{ if(oper<0 || oper>4)

return -1;

switch(operator_char_def[oper])

{ case '+':

return n1+n2;

case '-':

if(n1=2)

add_parenthesis(ss);

ss<=2)

add_parenthesis(ss);

ss《對於列印多個符合條件的表示式的情況,只需要改幾個地方

1、判斷完是24後,列印完,不返回,所以calc_24()方法要修改下

2、如果要增加減法可以負數的情況,則把cale_separate(),calc_consecutive(),還有calc()方法中所有判斷小於0的情況去掉即可

3、如果要增加除法可以為小數的情況,則需要把int改為float,並且去掉calc()方法中判斷除法不為整數的條件即可

24點演算法

include typedef float cdecl type myfun float float float funadd float x,float y float funsub float x,float y float funmul float x,float y float fundiv...

24點演算法

24點遊戲的演算法,其中最主要的思想就是窮舉法。所謂窮舉法就是列出4個數字加減乘除的各種可能性,包括括號的演算法。我們可以將表示式分成以下幾種 首先我們將4個數設為a,b,c,d,其中算術符號有 其中有效的表示式有a,ab cd,等等。列出所有有效的表示式。其中我們用列舉型別將符號定義成數字常量,比...

面試失敗之24點演算法

周一風塵僕僕 上午6點抵達成都 的去參加了凡客成都研發中心的面試,雖然經歷一夜的折騰讓我感覺頭腦很不清醒,不過這種面試狀態也不錯,能讓我深刻體驗一下在不清醒狀態下進行的思考和回答問題。午飯過後便出了門,習慣了不堵車,突然覺得成都的交通真的很擁堵。到達凡客成都研發中心填完錶後等了大概10多分鐘,面試官...