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))

结果为:

 

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 技术黑板 设计师:CSDN官方博客 返回首页