蓝桥杯刷题练习Python(笔记)
创始人
2024-05-24 22:12:02
0

在这里插入图片描述

# a1 = 'A'
# a2 = 'A B A'
# a3 = 'ABA C ABA'
# a4 = 'ABACABADABACABA'num = int(input('N <= 26:'))    # 26 个字母
str = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"if num == 1:a = 'A'  # str[0]
else:a = 'A'for i in range(1, num, 1):  # b = str[i]c = a + b + aa = c# print(str[i])# print(a)
print(a)

在这里插入图片描述

# print('请输入第一个字符串:', end="")
str1 = input()
# print('请输入第一个字符串:', end="")
str2 = input()l1 = len(str1)      # 计算字符串的长度
l2 = len(str2)s1_lower = str1.lower()   # 全部转换成小写字母
s2_lower = str2.lower()if l1 != l2:    # 长度不同print(1)
elif l1 == l2 and str1 == str2: # 长度相同 内容相同print(2)
elif l1 == l2 and s1_lower == s2_lower: # 长度相同 内容相同  大小写不同print(3)
elif l1 == l2 and s1_lower != s2_lower :    # 长度相同 内容不同print(4)

在这里插入图片描述

#【蓝桥杯】 水下探测器
# u : 水深
# s :初始深度
# u - up :  上浮1米
# d - down: 下沉1米print("请输入\'h\'和\'s\':", end="")  # h 和 s ,以空格分开
num = input()    #
print("请输入指令序列(仅包含u或d):", end="")
ud = input()     # 指令# print(num)
# print(type(num))
num = num.split()
# print(type(num))
num = list(map(int, num))
# print(num)
# print(num[0])
# print(num[1])h = num[0]  # 最大深度 h
s = num[1]  # 最初深度 sif s > 0:for i in ud:if i == 'u' and s > 0:s -= 1if i == 'd' and s < h:s += 1continue# print(i, end=" ")print(s)

猫吃鱼

在这里插入图片描述

在这里插入图片描述

样例分析

在这里插入图片描述

# 猫吃鱼
# n 站点数
# y 买鱼费用
# m 保存鱼到下一站的费用
# print("请输入\'n\'个站点:", end="")
n = int(input())
# print(type(n))
ls1 = list()
min_p = 10000
count = 0for i in range(1, n+1):# print(f"请输入第{i}站(y鱼费用)和(m保存鱼的费用):", end="")ls2 = list(map(int, input().split()))ls1.append(ls2)
# print(ls1)  # 二维列表# for i in ls1:
#     for j in i:
#         print(j, end=" ")
#     # print()
for i in range(len(ls1)):# for j in range(len(ls1[i])):# print(ls1[i][j], end=" ")if ls1[i][0] < min_p:min_p = ls1[i][0]count += min_pmin_p += ls1[i][1]print('\n', count)

第十届蓝桥杯大赛青少年创意编程C++组省赛之小猫吃鱼


评选最佳品牌

# 【评选最佳品牌】
# m 个商品(选1个品牌) 0i}位评委打分:", end="")s = input()     # 打分ls.append(s)    ## print()
ls = list(map(int, ls))
print(ls)for i in range(1, m+1):for j in ls:print(j, end=" ")

在这里插入图片描述


两个矩形求交面积

在这里插入图片描述

数学几何教学工具: https://www.geogebra.org/geometry

在这里插入图片描述

给出矩形的一对相对顶点的坐标:

  • 第一个矩形:1133
  • 第二个矩形:2244
a1x = 0  # 第一个矩形a的第1个顶点的x坐标
a1y = 0  # 第一个矩形a的第1个顶点的y坐标
a2x = 0  # 第一个矩形a的第2个顶点的x坐标
a2y = 0  # 第一个矩形a的第2个顶点的y坐标b1x = 0  # 第二个矩形b的第1个顶点x坐标
b1y = 0  # 第二个矩形b的第1个顶点y坐标
b2x = 0  # 第二个矩形b的第2个顶点x坐标
b2y = 0  # 第二个矩形b的第2个顶点y坐标
# a1x, a1y, a2x, a2y = list(map(float, input().split())) # int, float
# b1x, b1y, b2x, b2y = list(map(float, input().split()))
a1x = 0  # 第一个矩形a的第1个顶点的x坐标
a1y = 0  # 第一个矩形a的第1个顶点的y坐标
a2x = 0  # 第一个矩形a的第2个顶点的x坐标
a2y = 0  # 第一个矩形a的第2个顶点的y坐标b1x = 0  # 第二个矩形b的第1个顶点x坐标
b1y = 0  # 第二个矩形b的第1个顶点y坐标
b2x = 0  # 第二个矩形b的第2个顶点x坐标
b2y = 0  # 第二个矩形b的第2个顶点y坐标# print("第一个矩形对角:", end="")
# a1x, a1y, a2x, a2y = list(map(int, input().split()))
# print("第二个矩形对角:", end="")
# b1x, b1y, b2x, b2y = list(map(int, input().split()))
# print("第一个矩形对角:", end="")
a = list(map(float, input().split()))
# print("第二个矩形对角:", end="")
b = list(map(float, input().split()))
# print(a)
a1x = a[0]
a1y = a[1]
a2x = a[2]
a2y = a[3]
# print(b)
b1x = b[0]
b1y = b[1]
b2x = b[2]
b2y = b[3]
# print(a1x, a1y, a2x, a2y, b1x, b1y, b2x, b2y)

在这里插入图片描述
在这里插入图片描述

参考程序

a1x = 0  # 第一个矩形a的第1个顶点的x坐标
a1y = 0  # 第一个矩形a的第1个顶点的y坐标
a2x = 0  # 第一个矩形a的第2个顶点的x坐标
a2y = 0  # 第一个矩形a的第2个顶点的y坐标b1x = 0  # 第二个矩形b的第1个顶点x坐标
b1y = 0  # 第二个矩形b的第1个顶点y坐标
b2x = 0  # 第二个矩形b的第2个顶点x坐标
b2y = 0  # 第二个矩形b的第2个顶点y坐标# print("第一个矩形对角:", end="")
# a1x, a1y, a2x, a2y = list(map(int, input().split()))
# print("第二个矩形对角:", end="")
# b1x, b1y, b2x, b2y = list(map(int, input().split()))
# print("第一个矩形对角:", end="")
a = list(map(float, input().split()))
# print("第二个矩形对角:", end="")
b = list(map(float, input().split()))
# print(a)
a1x = a[0]
a1y = a[1]
a2x = a[2]
a2y = a[3]
# print(b)
b1x = b[0]
b1y = b[1]
b2x = b[2]
b2y = b[3]
# print(a1x, a1y, a2x, a2y, b1x, b1y, b2x, b2y)# 第三个矩形c第1个顶点的x、y坐标
c1x = max(min(a1x, a2x), min(b1x, b2x))
c1y = max(min(a1y, a2y), min(b1y, b2y))
# 第三个矩形c第2个顶点的x、y坐标
c2x = min(max(a1x, a2x), max(b1x, b2x))
c2y = min(max(a1y, a2y), max(b1y, b2y))if c1x >= c2x and c1y >= c2y:  # 不相交的情况a = 0b = 0
else:a = c2x - c1x    # 底边b = c2y - c1y    # 高
# 四边形的面积 = 底 x 高
s = a * b
if s < 0:# print("%.2f"%0)# s = 0.00# print("%.2f"% s)print("0.00")else:print("%.2f"% s)    # 保留小数后两位

蓝桥杯练习系统习题(Python)–基础练习 矩形面积交


2031 【入门】比较字符串蓝桥杯字符串

在这里插入图片描述
【题目描述】

编程实现两个字符串s1和s2的字典序比较。(保证每一个字符串不是另一个的前缀,且长度在100以内)。若s1和s2相等,输出0;若它们不相等,则指出其第一个不同字符的ASCII码的差值:如果s1>s2,则差值为正;如果s1

【输入格式】

输入2个字符串,每个字符串仅包含小写字母(不含空格),两个字符串之间用空格隔开。

【输出格式】

按题意输出差值或0。

【输入样例 】

java basic

【输出样例】

8

【前导知识】

ch1 = 'a'
ch2 = 'b'
print(type(ch1))print(ord(ch1)) # 输出ASCII编码
print(ord(ch2))
print(ord(ch2) - ord(ch1)) 

输出结果:


97
98
1

'''
编程实现两个字符串s1和s2的字典序比较。(保证每一个字符串不是另一个的前缀,且长度在100以内)。
若s1和s2相等,输出0;
若它们不相等,则指出其第1个不同字符的ASCII码的差值:
如果s1>s2,则差值为正;
如果s1 strlen2:#     print(abs(ord(s1[i]) - ord(s2[i])))  # ASCII编码函数-ord()   字符函数-chr()  取绝对值内置函数-abs()# elif strlen1 < strlen2:#     print("-", ord(s1[i]) - ord(s2[i]))# else:#     print(ord(s1[i]) - ord(s2[i]))break

2028【入门】s01串蓝桥杯字符串

在这里插入图片描述

所以,变换规律如下:

1次变换后:1;
2次变换后:01;
3次变换后:101;
4次变换后:01101;
5次变换后:10101101;

输入说明 :

输入1个整数n,范围为0<=n<=19,表示变换的次数

输出说明 :

n次变换后的s01串,行首行尾无空格,也无空行。

输入范例 :

6

输出范例 :

0110110101101

试题 算法训练 s01串—蓝桥杯


2032 【基础】比赛安排

问题描述
  设有有2 n(n<=6)个球队进行单循环比赛,计划在2 n – 1天内完成,每个队每天进行一场比赛。设计一个比赛的安排,使在2 n – 1天内每个队都与不同的对手比赛。
输入格式
  输入文件matchplan.in共一行,输入n的数值。

输出格式
  输出文件matchplan.out共(2 n – 1)行,第i行输出第i天的比赛安排。
  格式为: A-B,C-D,……。其中i是天数,A,B分别为比赛双方的编号,每行共2 n-1个比赛场次。

样例输入

2

样例输出

<1>1-2,3-4
<2>1-3,2-4
<3>1-4,2-3

print("请输入n:", end="")
n = int(input())
game_team = pow(2, n)       # 比赛球队
game_day = pow(2, n) - 1    # 比赛天数# 比赛情况
match = [[0] * 100] * 100
# 记录
temp = [0] * 100
# print(match, temp)# print(match, " ", tamp)
# print(match[0][0]," ", match[1], " ", tamp)print(f"\'{game_team} 支球队参赛, {game_day}天完成比赛\'")for i in range(1, game_day+1):print("<%d>" % i, end="")count = 0# print(f"<{i}>")for x in range(1, game_team+1):for y in range(x+1, game_team+1):print(f"({x},{y})", end=" ")# if match[x][y] == 0 and temp[x] == 0 and temp[y] == 0:#     count += 1#     temp[x] = 1   # 比赛过的小组标记为 1#     temp[y] = 1#     match[x][y] = 1#     print(f"{x}-{y}", end=" ")# if count == game_team / 2:#     continue# print()print()
print(f"({x},{y})", end=" ")  # 测试--打印出所有组合情况
print(f"match[{x}][{y}]={match[x][y]}", end=" ")

输出结果

请输入n:2
‘4 支球队参赛, 3天完成比赛’
<1>(1,2) (1,3) (1,4) (2,3) (2,4) (3,4)
<2>(1,2) (1,3) (1,4) (2,3) (2,4) (3,4)
<3>(1,2) (1,3) (1,4) (2,3) (2,4) (3,4)

请输入n:2
‘4 支球队参赛, 3天完成比赛’
<1>match[1][2]=0 1-2 match[1][3]=0match[1][4]=0
match[2][3]=0match[2][4]=0
match[3][4]=03-4

<2>match[1][2]=1 match[1][3]=0 1-3 match[1][4]=1
match[2][3]=1 match[2][4]=1
match[3][4]=1

<3>match[1][2]=1 match[1][3]=1 match[1][4]=1
match[2][3]=1 match[2][4]=1
match[3][4]=1

问题是关于二维列表[x][y] 标记为1 的处理上。以下这种方法是错误的。

match[i][j] = 1
match = [[0] * 4] * 4     # 创建二维列表
temp = [0] * 4            # 创建一维列表# print(match,"\n", temp)
print(match)
for i in range(4):for j in range(4):match[i][j] = 1print(f"match[{i}][{j}]={match[i][j]}", end=" ")print()

问题:想要修改二维列表中其中一个值,会造成所有项都改变!

输出结果:

[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
match[0][0]=1 match[0][1]=1 match[0][2]=1 match[0][3]=1
match[1][0]=1 match[1][1]=1 match[1][2]=1 match[1][3]=1
match[2][0]=1 match[2][1]=1 match[2][2]=1 match[2][3]=1
match[3][0]=1 match[3][1]=1 match[3][2]=1 match[3][3]=1

解决办法

原因是,创建二维数组的方式有问题。可能使用的创建方式是:

match = [[0] * 4] * 4   # 比赛情况

正确创建二维列表的方式为:

list1 = [[0] * 3 for _ in range(3)]

参考程序最终版本

import timegame_team = 0
game_day = 0
match = [[0] * 100 for _ in range(100)]   # 比赛情况  (注意二维列表的创建)def match_info():count = 0 	# 统计已经安排的比赛队伍global matchtemp = [0] * 100  # 记录 标记for x in range(1, game_team+1):for y in range(x+1, game_team+1):# print(f"({x},{y})", end=" ")  # 测试--打印出所有组合情况# print(f"temp[{x}][{y}]", end="|")# print(f"match[{x}][{y}]={match[x][y]}", end=" ")time.sleep(1)if match[x][y] == 0 and temp[x] == 0 and temp[y] == 0:count += 1temp[x] = 1   # 当天分配过的小组编号标记为 1temp[y] = 1   # match[x][y] = 1	 # 之前分配过的小组对决编号标记为 1print(f"{x}-{y}", end=" ")if count == game_team / 2:              # 2-2对决 比赛队伍组数breakprint()# print()if __name__ == '__main__':print("请输入n:", end="")n = int(input())game_team = pow(2, n)  # 比赛球队game_day = pow(2, n) - 1  # 比赛天数print(f"\'{game_team} 支球队参赛, {game_day}天完成比赛\'")for i in range(1, game_day + 1):print("<%d>" % i, end="")match_info()# print()

2036【基础】黑色星期五

四年一润百年不润四百年再润

以下实例用于判断用户输入的年份是否为闰年:

print("请输入年份:", end="")
y = int(input())
# 闰年:四年一润,百年不润,四百年再润。即能被4整除且不能被100整除的年份,或是既能被100整除也能被400整除的年份
# if y % 4 == 0 and y % 100 != 0 or y % 100 == 0 and y % 400 ==0:
# if y % 4 == 0 and y % 100 != 0:
#     print("闰年")
# elif y % 100 == 0 and y % 400 ==0:
#     print("闰年")
# else:
#     print("平年")# 口诀:四年一润,百年不润,四百年再润!!!if y % 4 == 0:if y % 100 == 0:if y % 400 == 0:print("闰年")else:print("不是闰年!")else:print("闰年")
else:print("不是闰年!")

题目描述

有些西方人比较迷信,如果某个月的13号正好是星期五,他们就会觉得不太吉利,用古人的说法,就是“诸事不宜”。请你编写一个程序,统计出在某个特定的年份中,出现了多少次既是13号又是星期五的情形,以帮助你的迷信朋友解决难题。
说明:(1)一年有365天,闰年有366天,所谓闰年,即能被4整除且不能被100整除的年份,或是既能被100整除也能被400整除的年份;(2)已知1998年1月1日是星期四,用户输入的年份肯定大于或等于1998年。

输入格式

输入只有一行,即某个特定的年份(大于或等于1998年)。

输出格式

输出只有一行,即在这一年中,出现了多少次既是13号又是星期五的情形。

输入样例

1998

输出样例

3

参考代码

import time
while True:print("请输入年份:", end="")y = int(input())while(1):if y < 1998:print("请输入大于或等于1998的年份:", end="")y = int(input())else:breakbreak# y = int(input())# 口诀:四年一润,百年不润,四百年再润!!!
day_year = 0        # 该年的天数
day_month2 = 0  # 该年的二月天数
if y % 4 == 0:if y % 100 == 0:if y % 400 == 0:print(f"{y}闰年")day_month2 = 29  # 闰年二月29天day_year += 366else:print(f"{y}不是闰年!")day_month2 = 28  # 平年二月28天day_year += 365else:print(f"{y}闰年")day_month2 = 29  # 闰年二月29天day_year += 366
else:print(f"{y}不是闰年!")day_month2 = 28  # 平年二月28天day_year += 365# 第一步: 判断闰年和平年 365 366天 year
# 第二步: 计算 12个月份  一星期7天   month  week
# 初始数据 1998 1.1 是星期四 (计算当前年份1月1日的星期是多少 = 1998.1.1星期四 + 当前-1年份的星期数 )day_count = 0             # 统计天数
for i in range(1998, y, 1):  # 统计1998 至 year-1年 天数if i % 4 == 0:if i % 100 == 0:if i % 400 == 0:print(f"{i}闰年")day_count += 366else:print(f"{i}不是闰年!")day_count += 365else:print(f"{i}闰年")day_count += 366else:print(f"{i}不是闰年!")day_count += 365# print(f"day_count = {day_count}")time.sleep(1)# print(f"1998年至{y}年共有:{day_count} 天")# 1星期 = 7天
week = divmod(day_count, 7)     # 星期=day_count // 7  ; day_count % 7; divmod()该函数返回的是元组(整数商,余数)
print(f"divmod({day_count}, 7)= {week}")         # 星期4 + 余数 就是y年的起始星期数
print(f"week[1] = {week[1]}")   # 取week元组中的第二个数字 余数if y == 1998:y_week = 4  # 1998.1.1是星期四
else:y_week = 4 + week[1] + 1    # y年1月1日 星期4 + 余数 就是y年的起始星期数  4 + 5 + 1 = 10if y_week > 7:   # 一周只有7天y_week_error= divmod(y_week, 7)  # divmod(10, 7) = (1, 3) 商1余3y_week = y_week_error[1]print(f"{y}年1月1日是星期{y_week}")black_week5 = 0     # 统计黑色星期五的数量# 12个月 1月:31天  2月:28/29天 3月:31天 4月:30天 ……
# if week == 星期五  and day == 13
#   count += 1 黑色星期五
# 月份()
# 天数() 二月份的天数
# 星期() 该年第一天的星期数
# month = [31, day_month2, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
month = {'m1': 31, 'm2': day_month2, 'm3': 31, 'm4': 30, 'm5': 31, 'm6': 30, 'm7': 31, 'm8': 31,'m9': 30, 'm10': 31, 'm11': 30, 'm12': 31}
for key, value in month.items():print(f"month[{key}][{value}]", end=" ")# print("\n", type(key), type(value))# breakfor i in range(1, value+1, 1):if y_week == 5 and i == 13:print(f"{key}月{i}日黑色星期5")black_week5 += 1y_week += 1if y_week > 7:y_week = 1time.sleep(0.05)
print(f"\n{y}年共有{black_week5}个黑色星期五")
print(black_week5)

参考资料:

1757 【入门】FJ的字符串蓝桥杯字符串 3 3 100.000%
1758 【入门】字符串对比蓝桥杯字符串 2 2 100.000%
2009 【基础】水下探测器:deep.cpp蓝桥杯字符串 6 6 100.000%
2010 【基础】小猫吃鱼:fish.cpp蓝桥杯数组问题递推 4 7 57.143%
2012 【基础】评选最佳品牌:king.cpp蓝桥杯字符串 1 1 100.000%
2020 【基础】报时助手蓝桥杯分支问题 4 5 80.000%
2021 【基础】分解质因数蓝桥杯循环的应用 2 2 100.000%
2022 【基础】龟兔赛跑预测蓝桥杯循环的应用 4 8 50.000%
2023 【提高】回形取数蓝桥杯二维数组递归 2 2 100.000%
2024 【入门】矩形面积交蓝桥杯分支问题 2 2 100.000%
2025 【提高】完美的代价蓝桥杯字符串贪心 1 1 100.000%
2026 【基础】芯片测试蓝桥杯 1 1 100.000%
2027 【入门】判定字符位置蓝桥杯字符串 4 4 100.000%
2028 【入门】s01串蓝桥杯字符串 3 3 100.000%
2029 【基础】阿尔法乘积蓝桥杯循环的应用 4 4 100.000%
2030 【基础】摆动序列蓝桥杯递推 1 1 100.000%
2031 【入门】比较字符串蓝桥杯字符串 3 3 100.000%
2032 【基础】比赛安排蓝桥杯 1 1 100.000%
2033 【提高】和为T蓝桥杯深搜 2 2 100.000%
2034 【基础】猴子分苹果蓝桥杯 4 6 66.667%
2035 【基础】集合运算蓝桥杯数组问题 3 3 100.000%
2036 【基础】黑色星期五蓝桥杯模拟 2 2 100.000%
2037 【基础】寂寞的数蓝桥杯循环的应用 3 3 100.000%
2038 【提高】删除多余括号蓝桥杯字符串 3 3 100.000%
2039 【基础】输出米字形蓝桥杯循环的应用 3 3 100.000%
2040 【基础】数的划分蓝桥杯动态规划 3 4 75.000%
2041 【入门】数组查找及替换蓝桥杯数组问题字符型 4 4 100.000%
2042 【入门】完数判断蓝桥杯循环的应用 5 5 100.000%
2043 【入门】薪水计算蓝桥杯分支问题 3 3 100.000%
2044 【入门】整除问题简单循环蓝桥杯 5 5 100.000%
2047 【提高】单词接龙的最长长度深搜蓝桥杯 1 1 100.000%
2048 【提高】黑白无常蓝桥杯深搜 2 2 100.000%
2349 【基础】评选最佳品牌

https://blog.csdn.net/lybc2019/article/details/105791813/

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
【PdgCntEditor】解... 一、问题背景 大部分的图书对应的PDF,目录中的页码并非PDF中直接索引的页码...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
修复 爱普生 EPSON L4... L4151 L4153 L4156 L4158 L4163 L4165 L4166 L4168 L4...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...