華東師範考研機試 慢速的遞迴

2021-10-03 20:54:06 字數 1717 閱讀 2156

因為要準備複試機試就每天刷兩道題

大家應該對遞迴不陌生,有很多問題使用遞迴解決會又方便又簡潔。

我們現在定義這樣乙個遞迴函式w(a, b, c):

如果 a <= 0 或 b <= 0 或 c <= 0, 那麼 w(a, b, c) 的值為1

如果 a > 20 或 b > 20 或 c > 20, 則 w(a, b, c) 的值為:

w(20, 20, 20)

如果 a < b 並且 b < c, 此時 w(a, b, c) 的值等於:

w(a, b, c-1) + w(a, b-1, c-1) - w(a, b-1, c)

其它情況下w(a, b, c)的值為:

w(a-1, b, c) + w(a-1, b-1, c) + w(a-1, b, c-1) - w(a-1, b-1, c-1)

形式上這個函式不難實現,但是如果我們直接這樣定義遞迴函式,對於並不那麼大的a,b,c(比如a=b=c=15)來說,程式都有可能要執行數個小時,因為這個遞迴收斂太慢,運算所需要的計算量太大了!現在希望你來做點什麼,快速計算出指定變數a,b,c的函式值.

input

輸入有多行,每行是由空格分隔的三個整數a,b,c,最後一行是 -1,-1,-1表示輸入的結束,這一行不需要處理。

output

除最後一行之外,對輸入資料的每一行的a,b,c分別計算並按樣例中的格式輸出w(a,b,c)的值

sample input

111

22210

46505050-

1718-

1-1-

1

sample output

w(1

,1,1

)=2w

(2,2

,2)=

4w(10

,4,6

)=523w(50

,50,50

)=1048576w(

-1,7

,18)=

1

#include

intmain()

}}while

(scanf

("%d%d%d"

,&a,

&b,&c)

&&(a!=-1

||b!=-1

||c!=-1

))return0;

}

#include

#include

#define maxn 21

int bw[maxn]

[maxn]

[maxn]

;intw(

int a,

int b,

int c)

if(a>

20|| b>

20|| c>20)

if(bw[a]

[b][c]!=0

)else

else

return bw[a]

[b][c];}

}int

main

(void

)printf

("w(%d, %d, %d) = %d\n"

,a,b,c,

w(a,b,c));

}return0;

}

類似於動態規劃,我們需要儲存已經計算過的w的值,按照題目給出的順序計算就沒有問題。

2019 年華東師範大學機試

沒有經過資料的檢驗,如果有錯誤歡迎指正 找規律後可以找到這個。固定任意一條邊 我這裡用了最大 然後二分角度 include using namespace std typedef long long ll const ll inf 0x3f3f3f3f const double eps 1e 9 c...

華東師範計算機專碩考研經驗

除了政治和數學其他的考的都還不錯,所以覺得寫一下還是比較有意義的。最重要的我覺得是不要買太多書!買多了就是浪費錢!另外每個人有每個人的學習方法,還是應該多看別人的經驗自己總結。我數學不好,所以就大概說一下。數學做題不在於多,我做了1000題和660,其實都差不多,都是源自真題,所以只要把1800或1...

華東師範大學2020機試題解

1.統計卡牌的值 2.求30的倍數 include include include include include using namespace std const int maxn 1000 10 int arr maxn bool compare char x,char y intmain i...