歷年考研複試專題 整數拆分

2021-08-28 09:40:24 字數 947 閱讀 1373

乙個整數總可以拆分為2的冪的和,例如: 7=1+2+4 7=1+2+2+2 7=1+1+1+4 7=1+1+1+2+2 7=1+1+1+1+1+2 7=1+1+1+1+1+1+1 總共有六種不同的拆分方式。 再比如:4可以拆分成:4 = 4,4 = 1 + 1 + 1 + 1,4 = 2 + 2,4=1+1+2。 用f(n)表示n的不同拆分的種數,例如f(7)=6. 要求編寫程式,讀入n(不超過1000000),輸出f(n)%1000000000。

每組輸入包括乙個整數:n(1<=n<=1000000)。
對於每組資料,輸出f(n)%1000000000。
示例1

7
6
看到本題時,第1反應是打表遞迴,找到n與 1—(n-1)的關係即可。可以很容易的理解到:

1、當n為基數時,n可以表示為2*k+1,那麼我們的每一種的分解當中必須有1才能滿足整數分解,再f(n-1)的所有滿足的分解式中添入1即可滿足要求,可以得到當n為奇數時,我們的f(n) = f(n-1)。

2、當n為偶數時,我們的所有滿足的整式可以分為兩種情況,含有1的整式和不含有1的整式,含有1的整式個數比較好得到,即位f(n-1)的整式中,每個整式添入1即可。不含有1的整式個數比較難找,但是倘若我們令n=2*k,由於我們所有的整式中不含有1那麼該整式中的所有加數一定能夠被2整除,當我們把所有的加數處以2以後,得到的結果時f(k)的個數,而f(k)就是我們所需要的結果。能夠得出遞推式f(n) = f(n-1)+f(n/2)。

綜合上列分析,可得遞推式:

f(n) = f(n-1)                 (    n%2==1   )

f(n) = f(n-1) + f(n/2)    (    n%2==0    )

#include #include #define rep(i,s,e) for(int i = s;i>n)

}

計算機歷年考研複試上機題 成績排序

這道題他的題目描述有一點模糊,他的測試用例上面在對於相同的值排序應該排序前後順序不變。這時我們就要用到c sort類函式stable sort 題目描述 題目 輸入任意 使用者,成績 序列,可以獲得成績從高到低或從低到高的排列,相同成績 都按先錄入排列在前的規則處理。例示 jack 70 peter...

計算機歷年考研複試上機題 反序輸出

偶遇清華大學的一道水題 題目傳送門 題目描述 輸入任意4個字元 如 abcd 並按反序輸出 如 dcba 輸入描述 題目可能包含多組用例,每組用例佔一行,包含4個任意的字元。輸出描述 對於每組輸入,請輸出一行反序後的字串。具體可見樣例。示例1 輸入 upin cvyj wjpw cxoa 輸出 ni...

計算機歷年考研複試上機題 手機鍵盤

題目傳送門 題目描述 按照手機鍵盤輸入字母的方式,計算所花費的時間 如 a,b,c都在 1 鍵上,輸入a只需要按一次,輸入c需要連續按三次。如果連續兩個字元不在同乙個按鍵上,則可直接按,如 ad需要按兩下,kz需要按6下 如果連續兩字元在同乙個按鍵上,則兩個按鍵之間需要等一段時間,如ac,在按了a之...