速算24 演算法思路

2021-06-21 16:33:20 字數 905 閱讀 8715

給定任意4個自然數,請給出通過4則運算,使結果為24的演算法,並且每個數在算式中使用一次。如果無法通過上述規則得到24,則輸出「無法計算得到24」。

如果給出4個數為2、3、4、5,程式的輸出結果應是乙個表示式:(5+3-2)*4

如果給出的4個數是1、1、1、1,程式的輸出結果應該是:無法計算得到24

要求:提交演算法思路即可。

思路:琢磨了好長時間沒想到什麼好的演算法,只能用窮舉了,先分析一下窮舉包含多少種情況:

1、運算元。由於是給定的4個數,所以把這個4個數進行全排列,共有:24種

2、運算子。4個數之間有3個運算子,每個運算子有4種選擇,共有:64種

3、運算子優先順序。共有:5種

統計上面的情況,應該總共有:24*64*5=7680種

即如果用a、b、c、d代表這四個數,&代表某一種運算子,優先順序依然用括號表示,那麼只需要分別考慮以下這些形式:

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)

實現:一、定義乙個方法完成兩個數之間的四則運算

int calculate(int x,int y,char flag) //其中x,y為兩個運算元,flag表示要進行哪一種四則運算,方法返回兩個運算元運算結果

二、定義乙個方法完成上述五種運算形式

string dealwithlevel(int number)  //定義運算子陣列

//迴圈完成第一種形式(a & b) & (c & d)

for(int i = 0;i三、定義乙個方法給4個給定的數做全排列

string ranknumber(int originalnumber)

演算法29 速算24

給定四個數字a,b,c,d,取值範圍為 1,13 新增合適的運算子 和括號 使得表示式等於24,給出一種可能的表示式方案 如果不可能則返回 1。例如 輸入2,3,12,12,輸出 3 2 12 12.輸入5,5,5,2,輸出 1.這個題目似乎沒有好的演算法,只能暴力搜尋。首先對於所有給個數字進行全排...

iOS 快速演算法

設要排序的陣列是mutablearray物件,首先任意選取乙個資料 通常選用陣列的第乙個數 作為關鍵資料,然後將所有比它小的數都放到它前面,所有比它大的數都放到它後面,這個過程稱為一次快速排序。步驟講解 1 設定兩個變數i,j,排序開始時i 0,就j mutablearray.count 1 2 設...

均值濾波快速演算法

1 概述 在影象處理中,在進行如邊緣檢測這樣的進一步處理之前,通常需要首先進行一定程度的降噪。中值濾波是一種非線性數字濾波器技術,經常用於去除影象或者其它訊號中的雜訊。這個設計思想就是 檢查輸入訊號中的取樣並判斷它是否代表了訊號,使用奇數個取樣 組成的觀察窗實現這項功能。觀察窗口中的數值進行 排序,...