11.查找接口成功率最优时间段
思路:循环记录符合条件的元素,以及将记录转换为输出要求的格式。
难度:⭐⭐⭐
n = int(input())
arr = list(map(int, input().split()))
minsum = 0
temp = []
cnt = 1
dic1 = {}
dic1_cnt = 0
# 创建字典,把符合条件的元素记录下来
for i in range(len(arr)):
minsum += arr[i]
minarg = minsum/(cnt)
if minarg <= n:
temp.append(i)
cnt += 1
dic1[dic1_cnt] = temp
else:
minsum = 0
cnt = 1
temp=[]
dic1_cnt += 1
# 读取字典,转换为所需格式
if len(dic1.values()) > 0:
output = ''
for i in dic1.values():
if len(i) > 1:
output = '-'.join((str(i[0]),str(i[-1])))
else:
output = str(i[0])
print(output, end=' ')
else:
print('NULL')
12.分割均衡字符串
思路:分别为X和Y都设定计数器以表示其数量,当数量一致时总数加一,XY计数器重置。
难度:⭐✨
arr = input()
# 设定三个计数器
cnt_x = 0
cnt_y = 0
cnt_sum = 0
for i in arr:
if i == 'X':
cnt_x += 1
if i == 'Y':
cnt_y += 1
# 当X的数量和Y的数量达到相同时,总计数器加一,X和Y的计数器重置
if cnt_x == cnt_y:
cnt_x = 0
cnt_y = 0
cnt_sum += 1
print(cnt_sum)
13.虚拟游戏理财
思路:通过将所有符合要求的单个产品和两个产品对应的投资汇报作比较,找到对应的产品号(可能是一个也可能是两个,也可能没有),将产品号按要求进行输出格式转换。
难度:⭐⭐✨
n, money_sum, risk_sum = map(int, input().split())
backrate = list(map(int, input().split()))
risk = list(map(int, input().split()))
maxmoney = list(map(int, input().split()))
# 创建一个数组,用于放置投资汇报以及其产品号
backmoney = []
for i in range(n):
# 如果只有一个产品符合要求
if maxmoney[i] <= money_sum and risk[i] <= risk_sum:
temp = maxmoney[i] * backrate[i]
backmoney.append([temp, i])
# 如果有两个产品符合要求
for j in range(i + 1, n):
if maxmoney[i] + maxmoney[j] <= money_sum and risk[i] + risk[j] <= risk_sum:
temp = maxmoney[i] * backrate[i] + maxmoney[j] * backrate[j]
backmoney.append([temp, [i, j]])
# 找出最大的投资回报,并找出其对应的产品号
backmoney.sort(key=lambda x: x[0], reverse=True)
max_num = backmoney[0][1]
# 输出格式转换
result = []
for i in range(len(maxmoney)):
if i in max_num:
result.append(maxmoney[i])
else:
result.append(0)
print(' '.join(str(x) for x in result))
14.靠谱的车
思路:题目要求跳过4,所以可以设定一个计数器,如果当前的循环数包含“4”,那么跳过,如果不包含“4”,那么计数器加一。
难度:⭐✨
n = int(input())
cnt = 0
for i in range(1, n + 1):
# 此处要让i转换为str格式才能使用.count()函数
if not str(i).count('4'):
cnt += 1
print(cnt)
15.执行时长
思路:一次处理时间可以处理其最大处理能力之内的任务数,那么在每次循环中,要判断当前的任务数需要多少次处理时间,并把剩余的任务数留到下一次继续处理。
难度:⭐⭐
import math
n = int(input())
l = int(input())
arr = list(map(int, input().split()))
# 初始化计数器以及余数
cnt_time = 0
last = 0
for i in arr:
# 如果上一次剩余的任务数和本次的任务数在处理能力之内,那么需要一次处理时间
if last + i <= n:
cnt_time += 1
last = 0
# 如果上一次剩余的任务数和本次的任务数超出处理能力,那么需要最大处理能力计算处理时间,并把不需要用一次最大处理能力的任务数留到下一次
else:
cnt_time += (last + i) // n
last = (last + i) % n
# 如果结束后仍有剩余任务未处理,那么最后一次性处理,这里需要向上取整,用math.ceil()函数
if last > 0:
cnt_time += math.ceil(last/n)
print(cnt_time)
16.万能字符单词拼写
思路:当前判别的单词,如果字符一样那么字符串需要需要去除这个字符,并且问号也需要考虑进去。当这个单词判别完毕后,下一个单词需要重新对字符串去除字符,所以字符串不能直接去除元素,而是每一次需要复制一个新的字符串用于判别。
难度:⭐⭐⭐
n = int(input())
char_arr = []
for i in range(n):
char_arr.append(input())
target_arr = input()
wenhao = target_arr.count('?')
cnt = 0
cnt_sum = 0
# 由于每次都需要在target_arr上删除元素,但是又不能改变target_arr,所以复制一个r用于判别
arr_copy = target_arr
for x in char_arr:
for y in x:
if y in arr_copy:
cnt += 1
# 如果有同样的元素,那么将复制的target_arr中的对应元素删除一个
arr_copy = arr_copy.replace(y,'',1)
# 问号凑数作为判别
if cnt + wenhao >= len(x):
cnt_sum += 1
# 当上一个单词判别完毕后,重新复制一个target_arr
arr_copy = target_arr
cnt = 0
print(cnt_sum)
17.来自异国的客人
思路:进制转换,就这题而言求出转换后的数组再统计其幸运数即可。但是进制转换求出的数组需要逆顺序才是正解。
难度:⭐⭐
k, n, m = map(int, input().split())
# 求余求商
arr = []
while k >= m:
ys = k % m
k = k // m
arr.append(ys)
print(arr)
# arr反顺序即为k的m进制表示
arr_reverse = []
for i in range(len(arr)):
arr_reverse.append(arr[-1-i])
# 计数
cnt = 0
for i in arr_reverse:
if i == n:
cnt += 1
print(cnt)
18.求最多可以派出多少支团队
思路:首先需要将符合条件的单个元素筛选出去,并计数。然后排序后设定前后两个指针,由于是从小到大排序,所以后面的数更大,当两个指针指向的数符合条件,两个指针往中间靠拢,否则,前指针前进去指向更大的数继续判别。
难度:⭐⭐✨
n = int(input())
arr = list(map(int, input().split()))
low = int(input())
# 使用过滤函数,把单个能力不符合要求的筛选下来,筛选出去的个数=新数组长度-旧数组长度
arr_1 = list(filter(lambda x:x<low,arr))
cnt = len(arr) - len(arr_1)
# 将数组从小到大排序后,设定两个指针,前后指向数组进行判别,当前指针和后指针汇合时,循环结束
arr_1.sort()
begin = 0
end = len(arr_1)-1
while begin < end:
# 符合要求的,前指针前进,后指针后退,计数
if arr_1[begin] + arr_1[end] >= low:
begin += 1
end -= 1
cnt += 1
# 不符合要求的,前指针前进,后指针不动,不计数
else:
begin += 1
print(cnt)
19.最长子字符串的长度
思路:根据'o'的个数进行统计
难度:⭐
s = input()
cnt = s.count('o')
if cnt%2 == 0:
print(len(s))
else:
print(len(s)-1)
20.机场航班调度程序
思路:这里主要将航空公司缩写和航班信息不进行拆分,直接对其进行排序。当然可以使用字典、类等方式排序,也可以将内容拆分,在排序时直接选定已拆分内容。
难度:⭐⭐
arr = list(input().split(','))
# 排序,首先对航空公司缩写排序,其次对航班信息排序
arr.sort(key=lambda x:(x[:2],x[2:]))
print(','.join(x for x in arr))