CSDN 第六期编程竞赛做题记录
——
CSDN编程竞赛报名地址:https://edu.csdn.net/contest/detail/16
9.18周日闲来无视写一下 csdn 的编程题,每期编程题有 4 题,这期的相对比较简单,我这样的水平都能写。
我这里是用 python3 写的,其它的语言俺也不太会。
——
一、严查枪火
题目描述:
X国最近开始严管枪火。 像是“ak”,“m4a1”,“skr”。都是明令禁止的。 现在小Q查获了一批违禁物品其中部分是枪支。
小Q想知道自己需要按照私藏枪火来关押多少人。 (只有以上三种枪被视为违法)
解题代码:
输入关押人数n和每个人私藏的物品名称
输出需要关押私藏枪火的人数
对每个输入的物品名称进行判定,如果符合禁止的字符串,数量+1
class Solution:
def __init__(self) -> None:
pass
def solution(self, n, vector):
result = None
# TODO: 请在此编写代码
num=0
a=['ak','m4a1','skr']
for i in vector:
if i in a:
num+=1
result=num
return result
if __name__ == "__main__":
n = int(input().strip())
vector = []
for i in range(n):
vector.append(input().strip())
s = Solution()
result = s.solution(n, vector)
print(result)
——
二、鬼画符门
题目描述:
鬼画符门,每年都会统计自己宗门鬼画符消耗的数量,往年一直是大师兄管理,但是这次鬼艺接手了,你能帮鬼艺写一个
程序统计每年消耗数量最多的鬼画符吗?
解题代码:
输入消耗鬼画符的数量以及每个鬼画符名称
输出消耗数量最多的鬼画符
输入每一个消耗的鬼符作为一个列表,然后对每一种用 count()
函数计数,统计为字典,然后对字典进行排序,打印出数量最多的那种鬼符即可。
class Solution:
def __init__(self) -> None:
pass
def solution(self, n, vector):
result = None
dic={}
for i in vector:
dic[i]=vector.count(i)
#print(dic)
a=sorted(dic.items(),key=lambda item:item[1],reverse=True)
#print(a)
result=a[0][0]
return result
if __name__ == "__main__":
n = int(input().strip())
vector = []
for i in range(n):
vector.append(input().strip())
s = Solution()
result = s.solution(n, vector)
print(result)
——
三、收件邮箱
题目描述:
已知字符串str,str表示邮箱的不标准格式。其中”.”会被记录成”dot”,”@”记录成”at”。写一个程序将str转化成可用
的邮箱格式。(可用格式中字符串中除了开头结尾所有”dot”,都会被转换,”at”只会被转化一次,开头结尾的不转化)
解题代码:
输入邮箱作为字符串
输出转换后的邮箱
主要问题在于开头结尾的不能被替换,不然可以直接一行代码 replace()
函数全部替换即可。
我这里把邮箱作为字符串,把开头结尾存在的 dot 和 at 先全部替换为临时字符串,再进行replace()
全部替换,替换完之后,再把开头结尾的临时字符串替换回 dot 和 at 。
class Solution:
def __init__(self) -> None:
pass
def solution(self, str):
result = None
# TODO: 请在此编写代码
if str[0:3]=='dot':
str='tmp1'+str[3:]
if str[-3:]=='dot':
str=str[:-3]+'tmp1'
s1 = str.replace('dot','.')
s1 = s1.replace('tmp1','dot')
if s1[0:2]=='at':
s1='tmp2'+s1[2:]
if s1[-2:]=='at':
s1=s1[:-2]+'tmp2'
s2 = s1.replace('at','@',1)
s2 = s2.replace('tmp2','at')
result=s2
return result
if __name__ == "__main__":
str = input().strip()
s = Solution()
result = s.solution(str)
print(result)
——
四、最长递增的区间长度
题目描述:
给一个无序数组,求最长递增的区间长度。如:[5,2,3,8,1,9]最长区间2,3,8长度为3
解题代码:
输入无序数组作为列表
输出列表中最长递增区间长度
class Solution:
def __init__(self) -> None:
pass
def solution(self, n, arr):
result = None
# TODO: 请在此编写代码
t=1
ans=0
for i in range(len(arr)-1):
if arr[i]<arr[i+1]:
t+=1
else:
ans=max(ans,t)
t=1
ans=max(ans,t)
result=ans
return result
if __name__ == "__main__":
n = int(input().strip())
arr = [int(item) for item in input().strip().split()]
s = Solution()
result = s.solution(n, arr)
print(result)