2022全国高校计算机能力挑战赛区域赛python组编程题和答案

该文章已生成可运行项目,

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

import itertools

n, k = map(int, input().split())
# 获取n个动物的活动时间
animal_active = list(map(int, input().split()))
# 获取n个动物的食量
animal_food = list(map(int, input().split()))
# 用数组存储每一种可能组合的幸福值
happy_arr = []
# 随机组合k个数的所有可能
combinations = itertools.combinations(range(n), k)
# 遍历循环每个组合
for combination in combinations:
    # 遍历每个combination中的值(值指下标)
    # 求和k个动物的活动总时间active_sum
    active_sum = sum(animal_active[item] for item in combination)
    # 求和k个动物中最小的食量food_min
    food_min = min(animal_food[item] for item in combination)
    # 求取当前组合的幸福值,并添加到happy_arr数组中
    happy_arr.append(active_sum * food_min)
print(max(happy_arr))

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位小数。
输出格式:平均每天送件单数:***.**,平均每天行车里程数:***.**(说明,输出字符串,精度为两位小数)

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]

# 求平均值
def arg_function(arr):
    sum = 0
    index = 0
    for i in range(len(arr)):
        if arr[i] != -1:
            sum += arr[i]
            index += 1
    arg_sum = sum / index
    return arg_sum

arg_LA = arg_function(LA)
arg_LB = arg_function(LB)
print("%.2f" % arg_LA)
print("%.2f" % arg_LB)

3.给定两个正整数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

输出样例1:
0:1
1:5
2:1
3:1
输出样例2:
0:189
1:299
2:299
3:299
4:299
5:299
6:299
7:299
8:299
9:299

m, n = map(int, input().split())
# 利用数组存放每个数字出现的总次数
arr = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

# 循环[m,n]的数字
for i in range(m, n + 1):
    # 数字属于[1,9]
    if i < 10:
        arr[i] = arr[i] + 1
    # 数字属于[10,99]
    elif i > 9 and i < 100:
        a = int(i / 10)
        b = int(i % 10)
        arr[a] = arr[a] + 1
        arr[b] = arr[b] + 1
    # 数字属于[100,999]
    elif i > 99 and i < 1000:
        a = int(i / 100)
        b = int(i % 100 / 10)
        c = int(i % 100 % 10)
        arr[a] = arr[a] + 1
        arr[b] = arr[b] + 1
        arr[c] = arr[c] + 1
    # 数字1000
    else:
        arr[0] = arr[0] + 3
        arr[1] = arr[1] + 1

# 输出结果
for i in range(len(arr)):
    if arr[i] > 0:
        print(f"{i}:{arr[i]}")

本文章已经生成可运行项目
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值