Python 網易筆試程式設計題(暗黑字串)

2021-07-29 16:13:59 字數 1397 閱讀 6856

如下是16年網易秋招的筆試程式設計題

乙個只包含'a'、'b'和'c'的字串,如果存在某一段長度為3的連續子串中恰好'a'、'b'和'c'各有乙個,那麼這個字串就是純淨的,否則這個字串就是暗黑的。例如:

baacaaccbaaa 連續子串"cba"中包含了'a','b','c'各乙個,所以是純淨的字串

aabbccaabb 不存在乙個長度為3的連續子串包含'a','b','c',所以是暗黑的字串

你的任務就是計算出長度為n的字串(只包含'a'、'b'和'c'),有多少個是暗黑的字串。

輸入乙個整數n,表示字串長度(1 ≤ n ≤ 30)
輸出乙個整數表示有多少個暗黑字串
2

3

9

21

這種有一些複雜的題目,可以通過狀態轉移方程推導出來,這在演算法中是很常見的。簡單舉個大家都很熟悉栗子~,斐波那契數列:

1 + 1 = 2;

1 + 2 = 3;

2 + 3 = 5;

3 + 5 = 8;

5 + 8 = 13;

...當然我們很容易知道,f(n) = f(n-1) + f(n-2)

在本例中,道理也是一樣的。直接考慮黑暗字串的情形。我們可以將兩個字串相等的情況記為s(n),將兩個字串不等的情況記為d(n);現在我們假設在第 i 狀態時可能的情況有f(i) = s(i) + d(i),那麼在下乙個狀態(i + 1)時,s(i)的情況為s(i+1) = s(i) + d(i),d(i+1) = 2 * s(i) + d(i),還是用個栗子來說明:

如:    aa --> aaa,

aa --> aab,

aa --> aac;

ab --> abb,

ab --> aba

到這兒,大家已經知道如何解決啦吧,啊哈哈哈~~~ i + 1狀態時的情況

f(i+1) = s(i+1) + d(i+1) = s(i) + d(i) + 2 * s(i) + d(i) = 2 * f(i) + s(i) = 2 * f(i) + f(i-1)

至此,遞推結果顯而易見了:f(n) = 2 * f(n-1) + f(n-2)

ok,最後照例附上python實現

#encoding:utf-8

def str_num(n):

n = int(n)

if n == 1 :

return 3

if n == 2 :

return 9

if n >= 3:

return 2 * str_num(n-1) + str_num(n-2)

n = input()

print str_num(n)

更多樣例請看這裡喲:

網易筆試程式設計題

時間限制 1秒 空間限制 262144k 又到了豐收的季節,恰逢小易去牛牛的果園裡遊玩。牛牛常說他對整個果園的每個地方都瞭如指掌,小易不太相信,所以他想考考牛牛。在果園裡有n堆蘋果,每堆蘋果的數量為ai,小易希望知道從左往右數第x個蘋果是屬於哪一堆的。牛牛覺得這個問題太簡單,所以希望你來替他回答。輸...

Python 網易筆試程式設計題(計算糖果)

如下是網易17年秋招程式設計題裡的題目 a,b,c三個人是好朋友,每個人手裡都有一些糖果,我們不知道他們每個人手上具體有多少個糖果,但是我們知道以下的資訊 a b,b c,a b,b c.這四個數值.每個字母代表每個人所擁有的糖果數.現在需要通過這四個數值計算出每個人手裡有多少個糖果,即a,b,c。...

網易筆試 程式設計

1 一片1000 1000的草地,初始站在 1,1 最左上角 每一秒小易都會橫向或縱向到相鄰草地吃草 不會越界 反派超超手上有n個陷阱,第i個陷阱位置 xi,yi 小易一旦進陷阱就會 獲,為解救小易,請計算小易最少多少秒可能會走入乙個陷阱,提前提醒小易 輸入描述 第一行 n 超超的陷阱數 第二行 n...