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

2021-10-11 22:23:55 字數 1566 閱讀 5308

可有意思的一題了呢

描述給出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

樣例輸出

yesno

#include

using

namespace std;

double a[5]

;bool

zero

(double x)

bool

count

(double q,

int n)

for(

int i=

0;i<

(n-1

);i++);

//儲存 n-1個要處理的數

int m=0;

for(

int k=

0;k(k!=i&&k!=j) b[m++

]=a[k]

;//遞迴剩下數的組合情況,若n=1時b[0]為24就返回true,否則就繼續直到所有可能性都被找一遍沒有能組合成24的可能就返回false

b[m]

=q[i]

+q[j];if

(count

(b,n-1)

)return

true

; b[m]

=q[i]

-q[j];if

(count

(b,n-1)

)return

true

; b[m]

=q[j]

-q[i];if

(count

(b,n-1)

)return

true

; b[m]

=q[i]

*q[j];if

(count

(b,n-1)

)return

true;if

(!zero

(q[j]))

if(!zero

(q[i]))

}}return

false;}

intmain()

if(end)

break;if

(count

(a,4))

printf

("yes\n");

else

printf

("no\n");

}return0;

}

百練2787 算24(遞迴)

總時間限制 3000ms 記憶體限制 65536kb 描述 給出4個小於10的正整數,你可以使用加減乘除4種運算以及括號把這4個數連線起來得到乙個表示式。現在的問題是,是否存在一種方式使得得到的表示式的結果等於24。這裡加減乘除以及括號的運算結果和運算的優先順序跟我們平常的定義一致 這裡的除法定義是...

百練noi 1775 採藥

總時間限制 1000ms 記憶體限制 65536kb 描述 辰辰是個很有潛能 天資聰穎的孩子,他的夢想是稱為世界上最偉大的醫師。為此,他想拜附近最有威望的醫師為師。醫師為了判斷他的資質,給他出了乙個難題。醫師把他帶到個到處都是草藥的山洞裡對他說 孩子,這個山洞裡有一些不同的草藥,採每一株都需要一些時...

百練noi 8785 裝箱問題

總時間限制 1000ms 記憶體限制 65536kb 描述 有乙個箱子容量為v 正整數,0 v 20000 同時有n個物品 0 n要求n個物品中,任取若干個裝入箱內,使箱子的剩餘空間為最小。輸入第一行是乙個整數v,表示箱子容量。第二行是乙個整數n,表示物品數。接下來n行,每行乙個正整數 不超過100...