2022-2023全国高校计算机能力挑战赛区域赛python组编程题
mi目录
2. 使用 f-string(Python 3.6 及以上)
闽农大宝玲楼
2022
1.
1.某动物研究员给动物园的动物们定了一个园区幸福值,其中园区幸福值的计算为一个园区内“所有动物的活动时间总和”乘上“所有动物中最小的食量”。现在新引进了n只动物,园长准备建一个包含k只动物的“最幸福动物园区”, 如果从这n只动物中选择k只动物进入该园区,请问该园区的最高幸福值是多少? 输入格式: 第一行输入两个整数n,k,分别表示新引进的n只动物,与需要挑选的k只动物。(1 <= k <= n < 1000) 第二行输入n只动物各自的活动时间,以空格间隔。(1 <= <= 1000,单位分钟) 第三行输入n只动物各自的食量,以空格间隔。(1 <= <= 10000,单位克) 输出格式: 输出一个整数表示这k只动物的最大幸福值。2 输入样例1: 6 2 2 10 3 1 5 8 5 4 3 9 7 2 输入样例2: 10 4 2 10 3 1 5 8 6 9 10 4 5 4 3 9 7 2 4 5 2 1 输出样例1: 60 说明:选择第二只动物与第五只动物,幸福值为60 输出样例2: 120
非常baby难度的一题,对于这种没有复杂度要求的比赛,大胆利用好python的特有功能
求组合数的库。这题我的思路是把从n中抽取k个,我们可以先抽取索引值,然后根据索引值找时间和食量。
from itertools import combinations
input_data=list(map(int,input().split()))
n=input_data[0]
k=input_data[1]
t=list(map(int,input().split()))
e=list(map(int,input().split()))
x=[]
comb=list(combinations(range(n),k))
m=len(comb)
v=[]
tsum=0 #注意清零
flag=[]
for com in comb:
tsum=0
v=[] #同样的,注意清零
for j in com:
tsum+=t[int(j)]
v.append(e[int(j)])
ex=min(v)
flag.append(tsum*ex)
result=max(flag)
print(result)
2.
快递行业的兴起慢慢的改变了人们的生活方式,越来越多的人选择了快递的方式。列表LA和列表LB中分别存放了一位快递小 哥今年9月份每天送件的单数和行车里程(公里)数,其中数值 - 1 表示该天休息,并未送件。 LA = [90, 114, -1, 110, 178, 115, 164, 155, 132, -1, 174, 153, 124, 189, 110, 145, -1, 160, 180, 139, 127, 129, 134, -1, 160, 178, 150, 144, 145, -1] LB = [87, 163, -1, 160, 184, 155, 169, 140, 129, -1, 190, 156, 141, 200, 115, 150, -1, 181, 190, 147, 120, 110, 120, -1, 170, 167, 144, 135, 110, -1] 要求:计算并输出9月份该快递小哥出工日每天平均的送件单数和平均的行车里程数,结果保留2位小数。 输出格式:平均每天送件单数: ** *.**, 平均每天行车里程数: ** *.** (说明,输出字符串,精度为两位小数)
a=[90, 114, -1, 110, 178, 115, 164, 155, 132, -1, 174, 153, 124, 189, 110, 145, -1, 160, 180, 139, 127, 129, 134, -1,
160, 178, 150, 144, 145, -1]
b=[87, 163, -1, 160, 184, 155, 169, 140, 129, -1, 190, 156, 141, 200, 115, 150, -1, 181, 190, 147, 120, 110, 120, -1,
170, 167, 144, 135, 110, -1]
for i in range(len(a)):
if i>=len(a):
break
if a[i]==-1:
a.remove(a[i])
b.remove(b[i])
x=sum(a)
t=len(a)
y=sum(b)
m=x/t
n=y/t
print("平均每天送件单数:""{:.2f}".format(m),",","平均每天行车里程数:","{:.2f}".format(n))
注意一下保留两位小数的写法,我这边是一种
1. 使用 format()
方法
number = 3.14159
formatted_number = "{:.2f}".format(number)
print(formatted_number) # 输出: 3.14
2. 使用 f-string(Python 3.6 及以上)
number = 3.14159
formatted_number = f"{number:.2f}"
print(formatted_number) # 输出: 3.14
给定两个正整数m、n(1<=m < n<=1000),请找出区间[m, n]中阿拉伯数字0~9出现的次数。比如[10, 12],0出现了1次,1出现了4次,2出现了1次,其余都是0次,输出时省略出现0次的数字。 输入格式: 一行m与n两个正整数,空格间隔 输出格式: 按照0~9的顺序,每行单独输出每个数字出现的次数,数字与出现次数之间用冒号间隔 #输入样例1: 10 13 输入样例2: 10 999
简单,就是把每次把个位取下来。
f=[0]*10
input_data=list(map(int,input().split()))
m=input_data[0]
n=input_data[1]
for i in range(m,n+1):
j=i
while(j):
f[j%10]+=1
j//=10
for i in range(10):
if(f[i]!=0):
print(f"{i}:{f[i]}")
注意j//10一定是整数除法
2023
1.
题目描述 小明在玩进阶版大富翁, 进阶版大富翁有特殊的步数计算方法。小明每次可以走的步数由一个公式决定。公式每个部分可以是一个整数或者一次数字抽奖 nds 。nds 表示, 在1到 s 中的整数中, 可以抽取 n 次,结果是你 n 次结果的和。总步数就是整个式子的结果。 如1+2d3,代表的就是1+2次在1到3之间抽取数字的结果。 结果最小值为三, 最大值为七。 现在题目中会给你一个字符串 s 表示步数的计算公式, 请你编写代码, 帮小明计算一下, 他可以走的步数的期望值是多少? (结果如果不是整数, 那么保留一位小数)。 输入输出格式 输入格式 一个字符串 s。 输出格式 一个整数。 输入输出样例1 输入 1+2d3 输出 5
利用python的异常检测。
然后就是期望值这里我们可以推导一下
x=0
y=0
z=0
s=list(input().split('+'))
for i in range(len(s)):
try:
x+=int(s[i])
except ValueError:
y+=int(s[i][0])*int(s[i][2])
z+=int(s[i][0])
sum=x+(y+z)//2
print(sum)
2.
给定两个字符串 text1 和text2,返回这两个字符串的最长公共子序列的长度。如果不存在公共子序列, 返回0。一个字符串的子序列是指这样一个新的字符串: 它是由原字符串在不改变字符的相对顺序的情况下删除某些字符 (也可以不删除任何字符) 后组成的新字符串。 例如, ace 是 abcde 的子序列, 但 aec 不是 abcde 的子序列。 两个字符串的公共子序列是这两个字符串所共同拥有的子序列。 输入格式 字符串。 输出格式 字符串。 输入/输出样例 输入1 lijiji,ijijij 输出1 4 说明/提示 · text1 和 text2 仅由小写英文字符组成。
可以考虑用动态规划,也可以求组合来解
from itertools import combinations
def getn(s):
m=[]
for i in range(len(s)+1):
coms=list(combinations(s,i))
for com in coms:
m.append(''.join(com))
return m
input_data=input().split(',')
s1=input_data[0]
s2=input_data[1]
str1=getn(s1)
str2=getn(s2)
num=[]
for st in str1:
if st in str2:
num.append(len(st))
if num:
numx=sorted(num)
print(numx[-1])
else:
print(0)
动态规划做法
input_data=input().split(',')
a=input_data[0]
b=input_data[1]
l1=len(a)
l2=len(b)
f=[[0]*(l2+1) for _ in range(l1+1)]
for i in range(1,l1+1):
for j in range(1,l2+1):
if a[i-1]==b[j-1]:
f[i][j]=f[i-1][j-1]+1
else:
f[i][j]=max(f[i][j-1],f[i-1][j])
print(f[l1-1][l2-1])
3.
题目描述 左截断素数是不包含0 位的素数, 当连续删除第一个数字时, 结果始终为素数。 可右截断的素数是不包含 0位的素数, 当连续删除最后一位时, 结果始终为素数。 创建一个将整数作为参数的函数, 并且: 如果整数只是一个可左截断的素数, 则返回“left”。 如果整数只是一个可右截断的素数, 则返回“right”。 如果整数是两者, 则返回“both”。 否则, 返回 False。 输入输出格式 输入格式 输入一个整数; 输出格式 输出一个字符串, 表示输入整数的素数类型。 输入输出样例1 输入 9137 输出 left 解释 (可选) 因为 9137 137 37 7 都是质数。 输入输出样例2 输入 5939 输出 right 解释 (可选) 因为5939 593 59和5都是素数。 说明提示 输入整数不会超过10⁶,
利用好截断
def is_prime(n):
if n <= 1:
return False
if n <= 3:
return True
if n % 2 == 0 or n % 3 == 0:
return False
for i in range(5, int(n ** 0.5) + 1, 6):
if n % i == 0 or n % (i + 2) == 0:
return False
return True
def left_truncatable_prime(n):
str_n = str(n)
for i in range(len(str_n)):
if not is_prime(int(str_n[i:])):
return False
return True
def right_truncatable_prime(n):
str_n = str(n)
for i in range(len(str_n)):
if not is_prime(int(str_n[:len(str_n) - i])):
return False
return True
def truncatable_prime_type(n):
is_left = left_truncatable_prime(n)
is_right = right_truncatable_prime(n)
if is_left and is_right:
return "both"
elif is_left:
return "left"
elif is_right:
return "right"
else:
return False
num = int(input())
result = truncatable_prime_type(num)
print(result)
"""
4
最近, 小明去了一个古老的国家。在之前很长的时间里, 它都是世界上最富有、最强大的王国。因此, 这个国家的人民仍然非常自豪, 即使当他们的国家不再那么富有。 这个国家的商人每个人只卖一件商品, 每件商品具有一定价值, 但如果你的钱低于一定金额, 他们会拒绝与你进行交易。 如果小明有一定单位的钱, 小明能得到的最大商品价值是多少? 输入输出格式 输入格式 第一行包含两个整数 N,M, 分别表示商品的数量和初始总金额。 接下来输入 N 行, 每行包含三个数字 P,Q,V, 分别表示每件商品的价格, 交易底线金额和商品的价值。 数字之间以空格间隔。 输出格式 针对输入, 打印出能得到的最大商品价值。 输入输出样例1 输入 2 10 10 15 10 5 10 5 输出 5
动态规划的背包问题n
input_data = list(map(int, input().split()))
n = input_data[0]
m = input_data[1]
p = [[0] * 4 for _ in range(n + 1)]
f = [[0] * (m + 1) for _ in range(n + 1)]
for i in range(1, n + 1):
p[i] = list(map(int, input().split()))
for i in range(1, n + 1):
for j in range(0, m + 1): # j 从 0 到 m
if j < p[i][0]:
f[i][j] = f[i - 1][j]
elif j>p[i][0]:
f[i][j] = max(f[i - 1][j], f[i - 1][j - p[i][0]] + p[i][2])
else:
f[i][j]=f[i-1][j]
print(f[n][m])
原文地址:https://blog.csdn.net/Niuma1122/article/details/143781599
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!