目录
题一:评分系统
题二:春游
题目三:字符串修剪与排序
题目四:进制转换
题目五:田忌赛马
题一:评分系统
s=input()
answer="DCBAD"#注意这就是标答 不是自定义标准答案
count=0
for i in range(5):if s[i]==answer[i]:#字符串一一比较count+=30
print(count)
题二:春游
实例解释:
第一行:输入的分别是 3个同学,报数了3次
第二行是:报数从0开始 如果从[0,n-1]都报数了就输出 同学的个数(也就是3)
那如果在示例2里,统计没有报数的个数。也就是遍历看[0,n-1]哪些没有被报数则计数器+1
n,m=map(int,input().split())
l=list(map(int,input().split()))
set1=set(l) #用集合去重 把调皮孩子多报的数剔除出去
l1=[]
if len(set1)==n:print(n)else:for i in range(n):if i not in set1:l1.append(i)print(' '.join(map(str,l1)))#规定输出格式
题目三:字符串修剪与排序
怎么去掉最后一个字符:
用字符串切片string[ i ][:-1]
按字符长度进行排序: l.sort(key=len)
sort排序总结
代码:
N=int(input())
l=input().split()#字符串 后面用字符串切片
for i in range(N):l[i]=l[i][:-1]#字符串切片,删除最后一个字母的字符串
l.sort(key=lambda x:len(x))
print(' '.join(l))
N = int(input())
strs = input().split()
# 排序,key取len即可
strs.sort(key=len)
# 输出,通过切片的方式去掉最后一个字符
for i in strs:print(i[:-1], end=' ')
题目四:进制转换
示例解释:
第一行是要进制转的数字,也就是把123进行进制转换
第二行是R=25,也就是进行25进制的转换
那么思路就是将123%25 存储,直至123//25==0时结束循环 最后逆序输出
需要注意的是存储格式转化为字符存 大于等于10的用A-Z进行存储
N=int(input())
R=int(input())
#N用R进制实现转换
digit=[]
if N==0:print(0)
else:while N:if (N%R)<10:digit.append(str(N%R))else:digit.append(chr(N%R-10+ord('A')))N=N//R# 余数是倒序排列的,需要反转print(''.join(reversed(digit)))
题目五:田忌赛马
田忌赛马贪心版题解
解题思路:
用自己的中等马KO田忌的下等马
用自己的上等马KO田忌的中等马
用自己的下等马KO田忌的上等马
注意每次我们的马参赛完要remove移除掉
N = int(input())
u = list(map(int, input().split()))
v = list(map(int, input().split()))win = 0
# 马升序排序
u.sort()
v.sort()
# 遍历田忌的马
for i in v:# 在我们的马中找出能胜过它的马for j in u:if j > i:win += 1# 这匹马使用过后,就移除u.remove(j)break
print(win)
防止时间复杂度过高,单层循环:
田忌的马每次比较都是向后移动 而我们会轮到下等马因此是轮回还是需要循环。
#单层循环实现
n=int(input())
u=list(map(int,input().split())) #我的马匹速度
v=list(map(int,input().split())) #田忌的马匹速度
u.sort()
v.sort()a=0 #表示田忌的参赛马匹索引
win=0
for i in u: #遍历我的马匹if i>v[a]: #当我的马可以赢过田忌的马win+=1a+=1 #田忌的参赛马匹索引后移
print(win)