百練2787 算24(遞迴)

2021-08-08 15:04:41 字數 1082 閱讀 5608

總時間限制: 3000ms 記憶體限制: 65536kb

描述

給出4個小於10的正整數,你可以使用加減乘除4種運算以及括號把這4個數連線起來得到乙個表示式。現在的問題是,是否存在一種方式使得得到的表示式的結果等於24。

這裡加減乘除以及括號的運算結果和運算的優先順序跟我們平常的定義一致(這裡的除法定義是實數除法)。

比如,對於5,5,5,1,我們知道5 * (5 – 1 / 5) = 24,因此可以得到24。又比如,對於1,1,4,2,我們怎麼都不能得到24。

輸入

輸入資料報括多行,每行給出一組測試資料,包括4個小於10個正整數。最後一組測試資料中包括4個0,表示輸入的結束,這組資料不用處理。

輸出

對於每一組測試資料,輸出一行,如果可以得到24,輸出「yes」;否則,輸出「no」。

樣例輸入

5 5 5 1

1 1 4 2

0 0 0 0

樣例輸出

yes

no

n個數算24,必有兩個數要先算。這兩個數算的結果,和剩餘n-2個數,就構成了n-1個數算24的問題。

列舉先算的兩個數,以及這兩個數的運算方式。

邊界條件:只剩乙個數算24。

注意:浮點數比較是否相等,不能用「==」。

#include

#include

#define eps 1e-6

using

namespace

std;

double a[5];

bool iszero(double x)

bool count24(double a,int n)

if(!iszero(a[i]))

//列舉兩個數的運算方式,並將結果存入b,構成n-1個數算24

}return

false;

}int main()

noi (百練)算24(列舉 遞迴)

可有意思的一題了呢 描述給出4個小於10個正整數,你可以使用加減乘除4種運算以及括號把這4個數連線起來得到乙個表示式。現在的問題是,是否存在一種方式使得得到的表示式的結果等於24。這裡加減乘除以及括號的運算結果和運算的優先順序跟我們平常的定義一致 這裡的除法定義是實數除法 比如,對於5,5,5,1,...

遞迴之算24

給出4個小於10的正整數,你可以使用加減乘除以及括號把這四個數字連線起來得到乙個表示式,現在的問題是,是否存在一種方式使得到的結果剛好為24,這裡加減乘除以及括號的運算結果以及優先順序和我們平時的定義一樣,除法是實數除法 例 5 5 5 1 5 5 1 5 24 1 1 4 2 無法得到24 inc...

百練 分解因數(遞迴)

總時間限制 1000ms 記憶體限制 65536kb 描述 給出乙個正整數a,要求分解成若干個正整數的乘積,即a a1 a2 a3 an,並且1 a1 a2 a3 an,問這樣的分解的種數有多少。注意到a a也是一種分解。輸入第1行是測試資料的組數n,後面跟著n行輸入。每組測試資料佔1行,包括乙個正...