2020算法筆試題總結

目錄

題目一:找出符合條件的字符串組合

1、題目描述

2、題目解答

題目二:兒童鋪方塊

1、題目描述

2、題目解答

題目三:迴文字符串數目

1、題目描述

2、題目解答


題目一:找出符合條件的字符串組合

1、題目描述

某公司經理希望在聖誕節期間通過出售組合裝來提高公司商品的銷售量。組合裝裏有不同種類的商品,以不同順序排列。每個商品都有唯一的characterID。而每個組合裝也有唯一的comboID,由組合裝中各種商品的排列順序表示。組合裝的comboID是通過將組合裝中商品的characterID按其在組合裝中的排列順序形成的。例如,如果購買了ID爲a、a、b和c的商品,且組合裝中的排列順序與此相同,則comboID是aabc。

由於商品是以組合裝形式銷售,因此經理想要找出所有暢銷的組合裝。如果有一位以上的顧客購買一款組合裝,就認爲該組合裝暢銷。他想要獲得具有與此相同的商品構成的組合裝的comboID的字符串列表。

輸入:

  • 函數/方法的輸入包含兩個參數
  • numcombo,表示組合裝套數的整數。
  • comboIDs,表示組合裝comboID的字符串列表。

輸出:

  • 返回一個列表,列表中的每個元素是表示具有相同產品構成的組合裝的comboID的字符串列表。

注意:組合裝的comboID爲小寫;輸出應按照comboID在輸入列表中出現的順序排列。

示例:

輸入:

numcombo=7

comboIDs=[“abcd”,”zesa”,”saze”,”abc”,”pqrst”,”cdab”,”bacd”]

輸出:

[[abcd,cdab,bacd],[zesa,saze]]

說明:comboID爲“abcd”,“cdab”,“bacd”的組合裝含有相同商品;並且comboID爲“zesa”和“saze”的組合裝含有相同商品。

2、題目解答

(1)解答思路

首先,將comboIDs列表中的字符串進行排序,存儲到sorted_list列表中;然後對sorted_list列表中的字符串進行頻率統計存入s_dict字典中;將字典中頻率大於1的字符串對應的comboIDs列表中的字符串輸出即可。

(2)代碼實現(Python3)

'''
#列表輸入
input_list=[]
for i in range(int(input())):
    input_list.append(str(input()))
print('輸入列表:',input_list)
'''
#將輸入的列表排序
input_list=['abcd','zesa','saze','abc','pqrst','cdab','bacd']
sorted_list=[]
for s in input_list:
    s_sort=sorted(s)
    sorted_list.append(''.join(s_sort))
print('排序後的列表:',sorted_list)

#頻率統計
s_dict={}
for i in sorted_list:
    if i in s_dict:
        s_dict[i]+=1
    else:
        s_dict[i]=1
print('字符串頻率統計字典:',s_dict)

#將符合條件的輸出
output_list=[]
for key,values in s_dict.items():
    if values>1:
        temp=[]
        for j in range(len(sorted_list)):
            if sorted_list[j]==key:
                temp.append(input_list[j])
        output_list.append(temp)
print('輸出列表:',output_list)

結果輸出:

題目二:兒童鋪方塊

1、題目描述

有一長度爲N(1<=N<=10)得遊戲場所,給定兩種不同方塊,一種長度爲1,另一種長度爲2,數目不限,兒童要將這個長度爲N的遊戲場所鋪滿,一共有多少種不同的鋪法?

例如:長度爲4的地面一共有如下5種鋪法

  • 4=1+1+1+1
  • 4=2+1+1
  • 4=1+2+1
  • 4=1+1+2
  • 4=2+2

2、題目解答

列舉法:長度爲1、2、3、4、5的地面鋪法分別有:1,2,3,5,8種……,這其實是個裴波那契數列的求解。

代碼如下

def num_all(n):
    if n==0:
        return 0
    elif n==1:
        return 1
    elif n==2:
        return 2
    else:
        return num_all(n-1)+num_all(n-2)
N=int(input())
print(num_all(N))

題目三:迴文字符串數目

1、題目描述

2、題目解答


#統計字符串中迴文串的數目
def str_num(s):
    s_len = len(s)
    count = 0
    for i in range(s_len):
        # 迴文串爲奇數,如aba
        for j in range(1, s_len):
            if i - j < 0 or i + j >= s_len or s[i - j] != s[i + j]:
                break
            count += 1
        # 迴文串爲偶數,如abba
        for j in range(1, s_len):
            if i - j + 1 < 0 or i + j >= s_len or s[i - j + 1] != s[i + j]:
                break
            count += 1
    return count+s_len

#找出字符串中所有的迴文串
def all_str(s):
    s_len=len(s)
    str_list = []
    for i in range(s_len):
        # 迴文串爲奇數,如aba
        for j in range(1,s_len):
            if i - j < 0 or i + j >= s_len or s[i - j] != s[i + j]:
                break
            str_list.append(s[i-j:i+j+1])
        # 迴文串爲偶數,如abba
        for j in range(1, s_len):
            if i - j + 1 < 0 or i + j >= s_len or s[i - j + 1] != s[i + j]:
                break
            str_list.append(s[i-j+1:i+j+1])
    str_list.extend(list(s))
    return str_list

s=input()
print(str_num(s))
print(all_str(s))

結果爲:

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章