1. 单词接龙
单词接龙的规则是:
可用于接龙的单词首字母必须要前一个单词的尾字母相同;
当存在多个首字母相同的单词时,取长度最长的单词,如果长度也相等,则取字典序最小的单词;已经参与接龙的单词不能重复使用。
现给定一组全部由小写字母组成单词数组,并指定其中的一个单词作为起始单词,进行单词接龙,
请输出最长的单词串,单词串是单词拼接而成,中间没有空格。
输入描述:
输入的第一行为一个非负整数,表示起始单词在数组中的索引K,0 <= K < N ;
输入的第二行为一个非负整数,表示单词的个数N;
接下来的N行,分别表示单词数组中的单词。
输出描述:
输出一个字符串,表示最终拼接的单词串。
示例1 输入输出示例仅供调试,后台判题数据一般不包含示例
输入
0
6
word
dd
da
dc
dword
d
输出
worddwordda
说明
先确定起始单词word,再接以d开头的且长度最长的单词dword,剩余以d开头且长度最长的有dd、da、dc,则取字典序最小的da,所以最后输出worddwordda。
示例2 输入输出示例仅供调试,后台判题数据一般不包含示例
输入
4
6
word
dd
da
dc
dword
d
输出
dwordda
说明
先确定起始单词dword,剩余以d开头且长度最长的有dd、da、dc,则取字典序最小的da,所以最后输出dwordda。
备注:
单词个数N的取值范围为[1, 20];
单个单词的长度的取值范围为[1, 30];
题解:
index = int(input())
num = int(input())
word_list = []
while num:
s = input()
word_list.append(s)
num -= 1
start = word_list.pop(index)
def ff(end, _word_list):
"""寻找合适的单词,并将其从 word_list 中 pop 掉"""
temp = [] # [(2, 'dd'), (2, 'db'), (2, 'da')]
for i in _word_list:
if end == i[0]:
temp.append((len(i), i))
if temp:
temp = sorted(temp, key=lambda x: x[0], reverse=True) # 从大到小排列
temp_2 = [temp[0][1]]
for j in temp[1:]:
if j[0] == temp[0][0]:
temp_2.append(j[1])
temp_2.sort()
word = temp_2.pop(0)
word_list.remove(word)
return word
else:
return ""
result = ff(start[-1], word_list)
start += result
while result:
result = ff(result[-1], word_list)
start += result
print(start)
2. 字符串加密
给你一串未加密的字符串str,通过对字符串的每一个字母进行改变来实现加密,加密方式是在每一个字母str[i]偏移特定数组元素a[i]的量,数组a前三位已经赋值:a[0]=1,a[1]=2,a[2]=4。
当i>=3时,数组元素a[i]=a[i-1]+a[i-2]+a[i-3]。
例如:原文 abcde 加密后 bdgkr,其中偏移量分别是1,2,4,7,13。
输入描述:
第一行为一个整数n(1<=n<=1000),表示有n组测试数据,每组数据包含一行,原文str(只含有小写字母,0<长度<=50)。
输出描述:
每组测试数据输出一行,表示字符串的密文。
示例1 输入输出示例仅供调试,后台判题数据一般不包含示例
输入
1
xy
输出
ya
说明
第一个字符x偏移量是1,即为y,第二个字符y偏移量是2,即为a。
题解:
n = int(input())
dp = [0] * 50
dp[0] = 1
dp[1] = 2
dp[2] = 4
def ff(num, char):
ascii_index = ord(char) # 在 ascii 中的位置
a = num + ascii_index
if 97 <= a <= 122:
next_char = chr(a)
else:
next_char = chr(97 + (a - 97) % 26)
return next_char
def f1(length):
for i in range(3, length + 1):
dp[i] = dp[i - 1] + dp[i - 2] + dp[i - 3]
return dp[length - 1]
for i in range(n):
s = input()
res = ""
for index in range(len(s)):
char = s[index]
if index == 0:
res += ff(1, char)
elif index == 1:
res += ff(2, char)
elif index == 2:
res += ff(4, char)
else:
num = f1(index)
res += ff(num, char)
print(res)