Python蓝桥杯训练:数组和字符串 Ⅲ

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=a1a2+a1a3+...+a1an+a2a3+...+an2an1+an2an+an1an

输入的第一行包含一个整数 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
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

-北天-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值