2023 睿抗机器人开发者大赛CAIP-编程技能赛-高职组(省赛) Python题解

前言:

up为大一新生,首次接触python语言,还在努力学习中,如果在阅读代码中遇到可优化或更方便的方法请尽情告知并指出,感谢。

该文章为up的写题记录,不代表规范解法


RC-v1 好之者不如乐知者

知之者不如好之者,好之者不如乐知者。热爱编程的你,请直接在屏幕上输出这句话:

How Can We Live a Joyful Life
Without Programming

输入格式:

本题没有输入。

输出格式:

如题面所示,输出分两行。注意没有标点符号,并请注意大小写必须与要求一致。

输入样例:

输出样例:

How Can We Live a Joyful Life
Without Programming

题解:

print('How Can We Live a Joyful Life')
print('Without Programming')

RC-v2 陈依涵的高情商体重计算器

陈依涵同学为了完成老师布置的作业,制作了一些很天才的小软件,并发布给大家使用。这使她一战成名,成为网红程序员。上图的“体重计算器”就是她的著名作品之一 —— 输入你的体重 w,她会根据你的体重很贴心地给出高情商的计算结果,规则如下:

  • 如果用户输入的原始体重不超过 100,那么分两种情况:如果不是 10 的整数倍,就输出抹掉个位数的结果;否则将原始体重的值降低 10 斤输出;
  • 对于超过 100 斤的原始体重,一律输出 100。

本题就请你仿照陈依涵同学的作品也做一个体重计算器。

输入格式:

输入第一行给出一个用户输入的体重值 w,以斤为单位,是一个不超过 500 的正整数。

输出格式:

在一行中输出:Gong xi nin! Nin de ti zhong yue wei: x duo jin,其中的 x 就是按照题面给出的规则计算出的结果。

输入样例 1:

88

输出样例 1:

Gong xi nin! Nin de ti zhong yue wei: 80 duo jin

输入样例 2:

90

输出样例 2:

Gong xi nin! Nin de ti zhong yue wei: 80 duo jin

输入样例 3:

199

输出样例 3:

Gong xi nin! Nin de ti zhong yue wei: 100 duo jin

 题解:

w = int(input())
if w <= 100:
  if w % 10 != 0:
    w -= w % 10
  else:
    w -= 10
else:
  w = 100
print('Gong xi nin! Nin de ti zhong yue wei: {} duo jin'.format(w))

RC-v3 环岛自行车赛

环岛自行车赛通常分为 N 个赛段,每个赛段统计运动员们的成绩(即完成该赛段的用时),最后累计得到总成绩。本题就请你根据某个运动员的成绩统计计算其骑行的平均速度。

输入格式:

输入首先在第一行中给出一个正整数 N(≤100),即赛段个数。第二行给出 N 个正整数,即每个赛段的长度(≤10,单位:公里)。第三行给出 N 个正整数,即运动员在每个赛段的用时(≤60,单位:分钟)。

输出格式:

在一行中输出该运动员完成全部比赛的平均速度,单位:公里/小时。输出小数点后 1 位。

输入样例:

4
5 8 3 6
25 31 18 42

输出样例:

11.4

样例解释:

赛道总长度为 5+8+3+6 = 22(公里);

运动员总用时为 25+31+18+42 = 116(分钟)= 116/60 (小时);

平均速度为 22/(116/60) = 11.4(公里/小时)。

题解:

n=int(input())
long=(input().split(' '))
time=(input().split(' '))
sum_long=0
sum_time=0
for i in long:
    sum_long+=int(i)
for i in time:
    sum_time+=int(i)
end=sum_long/(sum_time/60)
print('%.1f'%end)

RC-v4 两位数加法练习

老师要布置一些练习两位数加法的题目给小朋友,现在请你来帮忙出题。出题的方法是这样的:老师先把一长串数字摆在桌面上,要求你从这个数字串的头、尾各取一个数字。从头取的数字是十位,从尾取的数字是个位,这样拼成一个两位数。例如老师摆好了 12345678,则你应该取出 1 和 8 拼成 18。老师又要求你每拼出两个两位数,就布置一道加法题。则根据老师摆出的 8 个数字,你可以布置 2 道题:“18+27”和“36+45”。

输入格式:

输入在一行中给出一个不超过 100 位的正整数,其中最高位一定不是 0,并且保证这个数字的位数是 4 的倍数。

输出格式:

顺序输出根据老师要求布置的两位数加法题,并给出答案。每行输出一个加法算式,格式如样例。注意不要有任何空格。如果十位是 0,则不要输出这个多余的 0。

输入样例:

102345678910

输出样例:

10+1=11
29+38=67
47+56=103

题解: 

arr=list(input())
n=len(arr)
j=0
for i in range(0,int(n/2),2):
    a=int(arr[i])*10+int(arr[n-i-1])
    j=i+1
    b=int(arr[j])*10+int(arr[n-j-1])
    print('{}+{}={}'.format(a,b,a+b))

RC-v5 配花束

花店里有 n 种不同的花,每种花有若干枝。现将它们配成花束,要求每种花在每束中各 1 枝,最多可以配成多少束花?

输入格式:

输入第一行给出一个正整数 n(≤105),为花店里所有花的种类数。随后一行给出 n 个正整数,分别是每一种花的数量,每个整数都不超过 107。

输出格式:

输出按照题面要求最多可以配成的花束的数量。

输入样例:

10
24 35 81 19 47 90 65 51 28 72

输出样例:

19

题解: 

n=int(input())
arr=list(map(int,input().split()))
min=min(arr)
print(min)

分析:

最多可以配成的花束的数量即是最少的某种花的数量


RC-v6 数合数

合数是指在大于 1 的整数中除了能被 1 和本身整除外,还能被其他正整数整除的数。与之相对的是质数,而 1 既不属于质数也不属于合数。

现在给定以一个整数的范围 [A,B],要求从这个范围内的整数中删掉几个给定数字的所有倍数,问剩下的数字中还有几个合数?

输入格式:

输入第一行给出 3 个正整数,依次为 A、B、N,其中 1<A<B<105 为给定的整数范围(闭区间的两个端点),1≤N≤10 为给定数字的个数。

第二行给出 N 个不超过 B 的正整数。

输出格式:

对输入的 N 个不超过 B 的正整数,从 [A,B] 中删除每个数的所有倍数,最后在一行中输出 [A,B] 里剩下的数字中有多少个合数。

输入样例:

4 20 3
5 3 8

输出样例:

2

样例解释:

在所有大于等于 4 且小于等于 20 的数字中,删去 5 的倍数 5、10、15、20;删去 3 的倍数 6、9、12、18;删去 8 的倍数 8、16。剩下的数字是 4、7、11、13、14、17、19,其中有 2 个合数 4 和 14。

题解:

a, b, n = map(int, input().split())  
arr = list(map(int, input().split()))  
  
# 存放a到b所有素数  
arr_sushu = set()  
# 存放非素数(合数和1)  
arr_non_sushu = set(range(a, b + 1))  
  
# 优化素数检测  
for i in range(a, b + 1):  
    if all(i % j != 0 for j in range(2, int(i ** 0.5) + 1)):  
        arr_sushu.add(i)  
        arr_non_sushu.remove(i)  # 从非素数集合中移除素数  
  
# 计算被arr中数字整除的非素数  
for num in arr:  
    for i in range(num, b + 1, num):  
        if i in arr_non_sushu:  
            arr_non_sushu.remove(i)  
  
# 剩下的非素数数量就是题目要求的答案  
print(len(arr_non_sushu))
#该代码为up提交运行超时原判断素数代码
a, b, n = map(int, input().split())
arr = list(map(int, input().split()))
arr_sushu = set()
arr_non_sushu = set(range(a, b + 1))
for i in range(a, b + 1):
  j = 2
  for j in range(2, i):
    if (i % j == 0):
      break
  else:
    arr_sushu.add(i)
    arr_non_sushu.remove(i)
for num in arr:
  for i in range(num, b + 1, num):
    if i in arr_non_sushu:
      arr_non_sushu.remove(i)
print(len(arr_non_sushu))

分析:

该代码使用set()集合函数,以及判断素数,up对素数的判断方式并不够熟悉,使用了AI最优化了素数判断


RC-v7 翻箱倒柜

翻箱倒柜找东西大概是所有人头痛的事情。大部分人类在识别物体的时候,更容易识别颜色而不是大小的差异。所以当我们想从一大堆杂乱堆放的长方体盒子中找到我们需要的盒子时,根据颜色找比根据尺寸找要容易。现在的问题是,我们只知道尺寸不知道颜色…… 所以就要请你从这些盒子的记录中快速找出需要的盒子的颜色。

输入格式:

输入第一行给出一个正整数 N(≤105),为盒子的总数。随后 N 行,每行列出一只盒子的长、宽、高、颜色值。再后面是查询数量 K(≤100),随后 K 行,每行给出一个需要查询的盒子的长、宽、高。
这里所有尺寸都是不超过 109 的正整数,颜色值按 RRR.GGG.BBB 格式给出,三个分值都在 [0, 255] 区间内。同一行中的数字以空格分隔。
题目保证给出的 N 只盒子的尺寸都不相同,即不存在两只盒子具有相同的长、宽、高。注意:尺寸为 1、2、3 的盒子跟尺寸为 3、2、1的盒子是不同的。

输出格式:

对每个查询的盒子,在一行中按输入相同的格式输出其颜色。如果这个尺寸的盒子不存在,则输出 Not Found

输入样例:

10
15 23 23 000.255.136
12 32 15 255.000.092
29 32 15 000.000.255
15 23 25 255.255.000
10 15 23 000.000.000
12 17 15 255.255.255
15 10 23 023.189.163
29 32 33 233.069.215
9 31 987 179.002.031
40 15 23 230.000.000
6
15 23 23
12 17 15
29 32 33
10 15 15
15 32 12
9 31 987

输出样例:

000.255.136
255.255.255
233.069.215
Not Found
Not Found
179.002.031

题解: 

# 创建一个空字典来存储映射关系  
mp = {}  
  
# 读取并存储映射关系  
n = int(input().strip())  
for _ in range(n):  
    a, b, c, s = input().strip().split()  
    # 使用字符串拼接作为字典的键  
    key = a + "," + b + "," + c  
    mp[key] = s  
  
# 读取并查询映射关系  
k = int(input().strip())  
for _ in range(k):  
    a, b, c = input().strip().split()  
    # 使用字符串拼接作为键进行查询  
    key = a + "," + b + "," + c  
    if key not in mp:  
        print("Not Found")  
    else:  
        print(mp[key])

得分详情:

  • 13
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值