携程网安笔试

前面有一个测评,偏向公考题的类型。笔试共4题,100分。

大驼峰命名法

将单词用下划线相连的变量名改为单词首字母大写的变量名,比如xie_cheng改为XieCheng。

def to_camel( s:str ) -> str:
        words = s.split('_')
        return ''.join(word.capitalize() for word in words)

def main():
    T=int(input())

    for _ in range(T):
        s=input()
        camel = to_camel(s)
        print(camel)

if __name__ == "__main__" :
    main()        

素数计算,向下取整

情景题,游游按照某种规则吃掉n颗糖果,计算所用的天数。如果 n 是素数,每次吃掉当前糖果数的三分之一再加一个;如果n不是素数,每次吃掉当前糖果的一半再加一个,所有分数都向下取整。例如输入10,输出是3。

def is_prime( n:int ) -> bool:
    if n <= 1 :
        return False
    if n <= 3:
        return True
    if n % 2 == 0 or n % 3 == 0 :
        return False
    i=5
    while i * i <= n :
        if n % i == 0 or n % ( i + 2 ) == 0 :
            return False
        i += 6
    return True

def eat_candies(n:int) -> int:
    days = 0
    while n > 0:
        if is_prime(n):
            n -= n // 3  + 1
        else:
            n -= n // 2 + 1
        days += 1
    return days

n=int(input())
print(eat_candies(n))

最大公约数,动态规划

将长度为n的数组a将一个数组分成 m 个子数组,并使得这些子数组的 GCD 值之和最大。

使用 reduce 函数和 gcd 函数计算列表 arr 中所有元素的最大公约数,并返回这个值。

动态划分

from math import gcd
from functools import reduce

def arr_gcd(arr):
    if not arr :
        return 0
    return reduce(gcd,arr)

def max_sum(a,m):
    n = len(a)
    if m == 1:
        return arr_gcd(a)
    dp =[[0]*(m+1) for _ in range (n+1)]
    for i in range(n+1):
        dp[i][1] = arr_gcd(a[:i])
    for m in range (2,m+1):
        for i in range (n+1):
            for j in range (i):
                dp[i][m] = max(dp[i][m],dp[j][m-1]+arr_gcd(a[j:i]))
    return dp[n][m]

n,m = map(int, input().split())
a = [int(x) for x in input().split()]

print(max_sum(a,m))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值