Python蓝桥杯训练:数组和字符串 Ⅲ
一、单词分析
小蓝正在学习一门神奇的语言,这门语言中的单词都是由小写英文字母组 成,有些单词很长,远远超过正常英文单词的长度。小蓝学了很长时间也记不住一些单词,他准备不再完全记忆这些单词,而是根据单词中哪个字母出现得最多来分辨单词。
现在,请你帮助小蓝,给了一个单词后,帮助他找到出现最多的字母和这 个字母出现的次数。
输入一行包含一个单词,单词只由小写英文字母组成。
输出两行,第一行包含一个英文字母,表示单词中出现得最多的字母是哪 个。如果有多个字母出现的次数相等,输出字典序最小的那个。
第二行包含一个整数,表示出现得最多的那个字母在单词中出现的次数。
我们首先从用户输入中获取单词,然后将其存储在一个变量中,然后使用一个变量num
来跟踪出现次数最多的字母次数,并且使用一个列表list1
来存储出现次数最多的字母,然后我们使用for循环来遍历我们输入的单词,并且使用count()
函数计算每个字母出现的次数,如果当前字母的出现次数大于num
,则将num
设置为当前字母的出现次数,并将当前字母添加到lsit1
中,如果当前字母的出现次数等于 num
,则也将当前字母添加到 list1
中。最后,它将 list1
中的字母按字母顺序排序,并输出出现次数最多的字母以及它出现的次数。
具体实现代码如下:
word = input()
num = 0
list1 = []
for i in word:
x = word.count(i) # count()函数记录单个字符出现的次数
if x > num: # 字符出现次数较多时进行下列操作
num = x
list1 = []
list1.append(i)
elif x == num:
list1.append(i)
list1.sort()
print(list1[0])
print(num)
测试结果是:
longlonglongistoolong
o
6
二、删除字符
给定一个单词,请问在单词中删除 t 个字母后,能得到的字典序最小的单词是什么?
输入的第一行包含一个单词,由大写英文字母组成。
第二行包含一个正整数 t。
其中,单词长度不超过 100100,t 小于单词长度。
输出一个单词,表示答案。
这个题目首先需要理解的一个关键词是字典序最小
,字典序是指从前往后比较两个字符串的大小的方法,首先比较第一个字符,如果不同则第一个字符较小的字符串更小,如果相同就继续比较第二个字符,以此类推,来比较整个字符串的大小,例如要比较ABCDE和ABCCE两个字符串,因为前者的D比后者的C要更大一点,所以后者是字典序最小的字符串,字典序最小问题核心思想也是贪心算法策略,我们可以将输入的字符串word
转换为字符列表word_list
,然后使用for循环迭代``t`次,每次循环都会检查字符列表中的每个字符,如果发现有两个相邻的字符,其中一个比另一个大,则删除这个较大的字符,并退出循环,最后,它将字符列表中剩余的字符连接起来,并将其输出。
具体实现代码如下:
word = input()
t = int(input())
word_list = list(word)
for i in range(t):
for j in range(len(word_list)-1):
if word_list[j] > word_list[j+1]:
word_list.pop(j)
break
print(''.join(word_list))
测试结果如下:
LANQIAO
3
AIAO
三、求和
给定 n 个整数 a 1 a_1 a1, a 2 a_2 a2, · · · , a n a_n an ,求它们两两相乘再相加的和,即:
S = a 1 ⋅ a 2 + a 1 ⋅ a 3 + . . . + a 1 ⋅ a n + a 2 ⋅ a 3 + . . . + a n − 2 ⋅ a n − 1 + a n − 2 ⋅ a n + a n − 1 ⋅ a n S=a_1·a_2+a_1·a_3+...+a_1·a_n+a_2·a_3+...+a_{n-2}·a_{n-1}+a_{n-2}·a_n+a_{n-1}·a_n S=a1⋅a2+a1⋅a3+...+a1⋅an+a2⋅a3+...+an−2⋅an−1+an−2⋅an+an−1⋅an
输入的第一行包含一个整数 n。
第二行包含 n 个整数 a 1 , a 2 , . . . , a n a_1,a_2,...,a_n a1,a2,...,an。
输出一个整数 S,表示所求的和。请使用合适的数据类型进行运算。
我们首先,从输入中获取一个整数``n,表示要处理的数字的数量。然后从输入中获取
n个数字,并将它们存储在一个列表
a中。接下来,计算所有数字的总和,并将其存储在变量
s1中。然后使用for循环遍历每个数字,从总和中减去该数字,并将该数字与剩余的总和相乘,将结果累加到变量
S中。最后,它打印出变量
S`的值,即所有数字的数乘和。
具体实现代码如下:
n = int(input())
S = 0
a = list(map(int,input().split()))
s1 = sum(a)
for i in range(0, n):
s1 -= a[i]
S += a[i] * s1
print(S)
测试结果如下:
4
1 3 6 9
117
四、排列字母
小蓝要把一个字符串中的字母按其在字母表中的顺序排列。
例如,LANQIAO 排列后为 AAILNOQ。
又如,GOODGOODSTUDYDAYDAYUP 排列后为 AADDDDDGGOOOOPSTUUYYY。
请问对于以下字符串,排列之后字符串是什么?
WHERETHEREISAWILLTHEREISAWAY
这个题目是一个填空题而且比较简单,我们只需要将字符串“WHERETHEREISAWILLTHEREISAWAY”转换为一个字符列表,然后对该列表进行排序,最后将排序后的字符列表重新组合成一个字符串即可。
具体实现代码如下:
string = "WHERETHEREISAWILLTHEREISAWAY"
char_list = list(string)
char_list.sort()
print(''.join(char_list))
测试的结果是:
AAAEEEEEEHHHIIILLRRRSSTTWWWY