目录
第1关:换披萨
任务描述
披萨的尺寸一般分6-15英寸几种,一英寸约等于2.54厘米,将英寸直径乘以2.54即可得出以厘米为单位的直径。例如6寸披萨,即为6乘以2.54,得出结果为15.24厘米。 然而披萨加工时并不是严格到毫米不差的,考虑到加工过程及无效的披萨边,真正的有效直径需要去掉小数点后面数字。例如6寸披萨的标准直径为15.24厘米,实际有效直径一般为15厘米。披萨店经常会对顾客说:您订购的某尺寸的披萨卖完了,是否可以更换为多个小尺寸的披萨。例如:您订购的9寸披萨卖完了,可以给您2个6寸的披萨吗?
假设披萨厚度相同,价格与面积成正比,试问一个m英寸的大披萨至少要更换几个n英寸的小披萨,顾客才不吃亏?
输入格式
输入有2行
第一行输入整数m(英寸),代表订购的大披萨; 第二行输入整数n(英寸),代表推荐更换的小披萨;输出格式
整数,更换小披萨的数量示例
输入:
9
6
输出:
3
参考代码:
import math
def calculate_pizza_area(diameter_cm):
radius_cm = diameter_cm / 2
area_cm2 = math.pi * (radius_cm ** 2)
return area_cm2
def main():
# 输入大披萨和小披萨的直径(英寸)
m_inch = int(input())
n_inch = int(input())
# 将英寸转换为厘米
m_cm = m_inch * 2.54
n_cm = n_inch * 2.54
# 计算大披萨和小披萨的面积
m_area = calculate_pizza_area(m_cm)
n_area = calculate_pizza_area(n_cm)
# 计算需要多少个小披萨才能达到或超过大披萨的面积
num_small_pizzas = math.ceil(m_area / n_area)
print(num_small_pizzas)
if __name__ == "__main__":
main()
第2关:分段函数A
任务描述
按照上面的分段函数,对输入的整数x,输出对应的y值。对于超出范围的整数x,输出“ERROR”。
本题保证测试数据中x均为整数。
输入格式
输入一个整数,表示x的值输出格式
输出y的值或者“ERROR”示例1
输入:12
输出:ERROR示例2
输入:6
输出:36
参考代码:
x = int(input())
if x > 10 or x < -10:
print("ERROR")
else:
if 0 <= x < 6:
y = x + 14
elif 6 <= x <= 10:
y = 6 * x
else:
y = 2 * x * x * x + 4 * x * x + 3
print(y)
第3关:哥德巴赫猜想
任务描述
1742年,哥德巴赫给欧拉的信中提出了以下猜想“任一大于2的整数都可写成三个质数之和”。常见的猜想陈述为欧拉的版本,即任一大于2的偶数都可写成两个素数之和,亦称为“强哥德巴赫猜想”或“关于偶数的哥德巴赫猜想”。比如:24=5+19,其中5和19都是素数。输入一个正整数N,当输入为偶数时,分行按照格式“N = p + q”输出N的所有素数分解,其中p 、 q均为素数且p ≤ q。当输入为奇数或N<4时,输出'Data error!' 。
输入格式
输入一个正整数输出格式
当输入为偶数时,分行按照格式“N = p + q”输出N的所有素数分解,其中p 、 q均为素数且p ≤ q。当输入为奇数或N<4时,输出'Data error!' 。示例 1
输入:30
输出:
30=7+23
30=11+19
30=13+17示例 2
输入:77
输出:
Data error!
参考代码:
def is_prime(n):
"""判断素数的函数,接收一个正整数为参数,参数是素数时返回True,否则返回False"""
#=======================================================
# 补充你的代码
if n < 2:
return False
for i in range(2, int(n**0.5) + 1):
if n % i == 0:
return False
return True
#=======================================================
def goldbach_conjecture(num):
""" 哥德巴赫猜想, 接收一个不小于4的正整数为参数。
当参数为不小于4的偶数时,将其分解为两个素数的加和,按小数+数的格式输出。
有多种组合时全部输出,但不输出重复的组合,例如输出8=3+5,不输出8=5+3。
参数为奇数或小于4时,输出'Data error!'
"""
#=======================================================
# 补充你的代码
if num < 4 or num % 2 != 0:
print('Data error!')
return
# 找到所有的素数,直到num
primes = [i for i in range(2, num + 1) if is_prime(i)]
# 存储结果
results = []
# 遍历所有素数,寻找符合条件的组合
for p in primes:
q = num - p
if q >= p and is_prime(q): # 确保 p <= q
results.append(f"{num}={p}+{q}")
# 打印所有结果
for result in results:
print(result)
#=======================================================
if __name__ == '__main__':
positive_even = int(input()) # 输入一个正数
goldbach_conjecture(positive_even)
第4关:个人信息提取
任务描述
用户输入自己的个人信息,格式如下:0122923450321 王昊 法学1801 河北 2001年
数据分别表示:学号 姓名 专业班级 籍贯 出生年份,各数据间空格间隔
有些用户没有按照规则输入数据,输入自己出生年份的时候写成了类似‘1900年生’或‘出生于1985’或‘19岁生于2006年11月’的数据格式
请注意程序仍然需要正确读取该项数据,本题保证这些用户输入时一定只含有1个4位数字连续组成的年份数据。
请按照输出样式输出姓名,班级,出生年份呢
提示:
列表中的数据和字符串当中的字符一样,都具有有序的索引,且引用数据和切片方式一致。
str.isdigit()可以帮助判断字符串是否全部由数字字符组成,返回值为'True'或'False'
输入示例
0122923450321 王昊 法学1801 河北 2001年输出示例
姓名:王昊 班级:法学1801 出生:2001年示例
输入:
0122923450321 王昊 法学1801 河北 2001年
输出:
姓名:王昊
班级:法学1801
出生:2001年
参考代码:
import re
def main():
# 读取用户输入
user_input = input().strip()
# 分割输入为各部分
parts = user_input.split()
# 提取学号(我们实际上不需要使用它)
student_id = parts[0]
# 姓名
name = parts[1]
# 班级
class_name = parts[2]
# 籍贯
hometown = parts[3]
# 出生年份,可以使用正则表达式提取出四位数年份
year_match = re.search(r'\d{4}', ' '.join(parts[4:])) # 这里将剩余部分连接起来搜索
if year_match:
birth_year = year_match.group() + '年' # 加上“年”字
# 输出结果
print(f"姓名:{name}")
print(f"班级:{class_name}")
print(f"出生:{birth_year}")
if __name__ == '__main__':
main()
第5关:插入位置
任务描述
对一个有序的整数序列,现在要将一个整数插入进去,并保证该序列仍然有序。请输出这个数要插入的位置第一行输入若干个整数,以空格间隔,本题保证用例中输入的数值顺序一定是从小到大,原始列表中无重复数据
第二行输入一个整数n
将整数序列放入列表ls
如果ls中已经存在n,则不插入该数,输出 Fail以及ls列表
若ls中可以插入n,输出插入位置(从0开始计数),以及插入后的ls列表
示例
输入:
1 2 3 5
4
输出:
3
[1, 2, 3, 4, 5]
参考代码:
def insert_into_sorted_list():
# 读取输入,第一行为有序整数序列
input_list = input().strip().split()
# 将输入的字符串转化为整数列表
ls = list(map(int, input_list))
# 读取要插入的整数n
n = int(input().strip())
# 检查n是否已经在ls中
if n in ls:
print("Fail")
print(ls)
return
# 找到插入位置
insert_pos = 0
while insert_pos < len(ls) and ls[insert_pos] < n:
insert_pos += 1
# 在合适的位置插入n
ls.insert(insert_pos, n)
# 输出插入位置和插入后的列表
print(insert_pos)
print(ls)
# 调用函数
insert_into_sorted_list()
第6关:查询省会
任务描述
有诗云:两湖两广两河山,五江云贵福吉安,四西二宁青甘陕,还有内台北上天。中国各省、直辖市、自治区和特别行政区的字典数据如下:
设计程序,接收用户输入的省、直辖市、自治区和特别行政区名称,输出对应的省会名称,当输入错误时输出“输入错误”。程序可以重复接收用户输入,直接输入回车时退出程序。输入格式
一个或多个输入
每行输入一个省、直辖市、自治区或特别行政区名称
最后一行输入一个回车输出格式
输出对应的省会名称示例 1
输入:
新疆
北京输出:
乌鲁木齐
北京
参考代码:
def main():
# 定义中国各省、直辖市、自治区和特别行政区及其省会的字典
capitals = {
'湖南': '长沙', '湖北': '武汉', '广东': '广州', '广西': '南宁',
'河北': '石家庄', '河南': '郑州', '山东': '济南', '山西': '太原',
'江苏': '南京', '浙江': '杭州', '江西': '南昌', '黑龙江': '哈尔滨',
'新疆': '乌鲁木齐', '云南': '昆明', '贵州': '贵阳', '福建': '福州',
'吉林': '长春', '安徽': '合肥', '四川': '成都', '西藏': '拉萨',
'宁夏': '银川', '辽宁': '沈阳', '青海': '西宁', '海南': '海口',
'甘肃': '兰州', '陕西': '西安', '内蒙古': '呼和浩特', '台湾': '台北',
'北京': '北京', '上海': '上海', '天津': '天津', '重庆': '重庆',
'香港': '香港', '澳门': '澳门'
}
while True:
# 接收用户输入
province = input().strip()
# 判断输入是否为空
if province == "":
break
# 输出对应的省会或错误信息
if province in capitals:
print(capitals[province])
else:
print("输入错误")
main()
番外:第7、8关在主页的另两篇文章里喔~