CSDN 第六期编程竞赛做题记录

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)

你可能感兴趣的:(python学习,算法,python,编程)