前面有一个测评,偏向公考题的类型。笔试共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))