網易2017秋招程式設計題:暗黑的字串 [python]
阿新 • • 發佈:2019-01-23
'''
[程式設計題] 暗黑的字串
時間限制:1秒
空間限制:32768K
一個只包含'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)
輸出描述:
輸出一個整數表示有多少個暗黑字串
輸入例子1:
2 3
輸出例子1:
9 21
'''
'''
解題思路:找規律
我們先找出n=1,2,3時滿足條件的暗黑字串數,根據這些數字推得n=4,5,6...等等時候的情況
因為如果一個字串滿足暗黑字串的要求,那麼該字串增加一位是否仍滿足要求只需要考察最後兩個字母的組合情況
任意兩個字母組合,一個有9種情況,AA,AB,AC,BA,BB,BC,CA,CB,CC(即n=2時的暗黑數列)
當n=3時候,暗黑數列有21種,在21種中最後兩位的情況也一定在AA,AB,AC,BA,BB,BC,CA,CB,CC這九種中,具體個數的分佈情況如下表:
n 2 3 4 5
AA 1 3 7 17
AB 1 2 5 12
AC 1 2 5 12
BA 1 2 5 12
BB 1 3 7 17
BC 1 2 5 12
CA 1 2 5 12
CB 1 2 5 12
CC 1 3 7 17
根據表中資料,我們可以知道:以AA,AB,AC,BA,BB,BC,CA,CB,CC結尾的暗黑序列各1個(n=2),
可以衍生出以AA,AB,AC,BA,BB,BC,CA,CB,CC結尾的暗黑序列3,2,2,2,3,2,2,2,3個(n=3),
如果n>3,那麼上述的暗黑序列可以繼續衍生,
衍生出AA,AB,AC,BA,BB,BC,CA,CB,CC結尾的暗黑序列2*2+1=5,2*2+1=5,2*3+1=7,2*2+1=5,2*3+1=7,2*2+1=5,2*2+1=5,2*2+1=5,2*3+1=7個(n=4)
繼續衍生 5*2+2=12,5*2+2=12,5*3+2=17,5*2+2=12,5*3+2=17,5*2+2=12,5*2+2=12,5*2+2=12,5*3+2=17...
規律已經出現了,找到規律後用程式碼表示出來即可
'''
'''
程式碼執行結果:
答案正確:恭喜!您提交的程式通過了所有的測試用例
[程式設計題] 暗黑的字串
時間限制:1秒
空間限制:32768K
一個只包含'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)
輸出描述:
輸出一個整數表示有多少個暗黑字串
輸入例子1:
2 3
輸出例子1:
9 21
'''
'''
解題思路:找規律
我們先找出n=1,2,3時滿足條件的暗黑字串數,根據這些數字推得n=4,5,6...等等時候的情況
因為如果一個字串滿足暗黑字串的要求,那麼該字串增加一位是否仍滿足要求只需要考察最後兩個字母的組合情況
任意兩個字母組合,一個有9種情況,AA,AB,AC,BA,BB,BC,CA,CB,CC(即n=2時的暗黑數列)
當n=3時候,暗黑數列有21種,在21種中最後兩位的情況也一定在AA,AB,AC,BA,BB,BC,CA,CB,CC這九種中,具體個數的分佈情況如下表:
n 2 3 4 5
AA 1 3 7 17
AB 1 2 5 12
AC 1 2 5 12
BA 1 2 5 12
BB 1 3 7 17
BC 1 2 5 12
CA 1 2 5 12
CB 1 2 5 12
CC 1 3 7 17
根據表中資料,我們可以知道:以AA,AB,AC,BA,BB,BC,CA,CB,CC結尾的暗黑序列各1個(n=2),
可以衍生出以AA,AB,AC,BA,BB,BC,CA,CB,CC結尾的暗黑序列3,2,2,2,3,2,2,2,3個(n=3),
如果n>3,那麼上述的暗黑序列可以繼續衍生,
衍生出AA,AB,AC,BA,BB,BC,CA,CB,CC結尾的暗黑序列2*2+1=5,2*2+1=5,2*3+1=7,2*2+1=5,2*3+1=7,2*2+1=5,2*2+1=5,2*2+1=5,2*3+1=7個(n=4)
繼續衍生 5*2+2=12,5*2+2=12,5*3+2=17,5*2+2=12,5*3+2=17,5*2+2=12,5*2+2=12,5*2+2=12,5*3+2=17...
規律已經出現了,找到規律後用程式碼表示出來即可
'''
'''
程式碼執行結果:
答案正確:恭喜!您提交的程式通過了所有的測試用例
'''
n = int(input())
if n == 1:
print(3)
elif n == 2:
print(9)
else:
first = 1
second = 2
for i in range(n-3):
temp = second * 2 + first
first = second
second = temp
print(second*9+first*3)