# 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 + a
a = 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] # 最初深度 s
if s > 0:
for i in ud:
if i == 'u' and s > 0:
s -= 1
if i == 'd' and s < h:
s += 1
continue
# print(i, end=" ")
print(s)
猫吃鱼
样例分析
# 猫吃鱼
# n 站点数
# y 买鱼费用
# m 保存鱼到下一站的费用
# print("请输入\'n\'个站点:", end="")
n = int(input())
# print(type(n))
ls1 = list()
min_p = 10000
count = 0
for 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_p
min_p += ls1[i][1]
print('\n', count)
第十届蓝桥杯大赛青少年创意编程C++组省赛之小猫吃鱼
评选最佳品牌
# 【评选最佳品牌】
# m 个商品(选1个品牌) 0<m<10
# n 个评委
# 输入格式 m
# 输入格式 n
print("请输入\'m\'个商品和\'n\'个评委(0<m10,0<n<100):", end="")
num = input()
num = list(map(int, num.split()))
print(num)
m = num[0] # 商品
n = num[1] # 评委
ls = list()
for i in range(1, n+1):
# print(i)
# for j in range(m):
# s = input()
# ls.append(s)
# # print(j, end=" ")
print(f"第{i}位评委打分:", 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 = 0
b = 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<s2,则差值为负。
【输入格式】
输入2个字符串,每个字符串仅包含小写字母(不含空格),两个字符串之间用空格隔开。
【输出格式】
按题意输出差值或0。
【输入样例 】
java basic
【输出样例】
8
【前导知识】
ch1 = 'a'
ch2 = 'b'
print(type(ch1))
print(ord(ch1)) # 输出ASCII编码
print(ord(ch2))
print(ord(ch2) - ord(ch1))
输出结果:
<class ‘str’>
97
98
1
'''
编程实现两个字符串s1和s2的字典序比较。(保证每一个字符串不是另一个的前缀,且长度在100以内)。
若s1和s2相等,输出0;
若它们不相等,则指出其第1个不同字符的ASCII码的差值:
如果s1>s2,则差值为正;
如果s1<s2,则差值为负。
'''
# # print("请输入第1个字符串:", end='')
# s1 = input()
# # print("请输入第2个字符串:", end="")
# s2 = input()
ls = list(input().split())
s1 = ls[0]
s2 = ls[1]
# print(type(ls))
# print(ls)
strlen1 = len(s1)
strlen2 = len(s2)
# print(s1, s2)
# print(strlen1, strlen2)
if s1 == s2:
print(0) # 若s1和s2相等,输出0
# elif s1 != s2:
for i in range(min(strlen1, strlen2)):
# print(f"第{i}个元素:{s1[i]} {s2[i]}", end=" ")
if s1[i] == s2[i]:
continue
elif s1[i] != s2[i]: # 不相等,则指出其第1个不同字符的ASCII码的差值
print(ord(s1[i]) - ord(s2[i]))
# if strlen1 > 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]=0
match[1][4]=0
match[2][3]=0
match[2][4]=0
match[3][4]=0
3-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] = 1
print(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 time
game_team = 0
game_day = 0
match = [[0] * 100 for _ in range(100)] # 比赛情况 (注意二维列表的创建)
def match_info():
count = 0 # 统计已经安排的比赛队伍
global match
temp = [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 += 1
temp[x] = 1 # 当天分配过的小组编号标记为 1
temp[y] = 1 #
match[x][y] = 1 # 之前分配过的小组对决编号标记为 1
print(f"{x}-{y}", end=" ")
if count == game_team / 2: # 2-2对决 比赛队伍组数
break
print()
# 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:
break
break
# 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 += 366
else:
print(f"{y}不是闰年!")
day_month2 = 28 # 平年二月28天
day_year += 365
else:
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 += 366
else:
print(f"{i}不是闰年!")
day_count += 365
else:
print(f"{i}闰年")
day_count += 366
else:
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 = 10
if y_week > 7: # 一周只有7天
y_week_error= divmod(y_week, 7) # divmod(10, 7) = (1, 3) 商1余3
y_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))
# break
for i in range(1, value+1, 1):
if y_week == 5 and i == 13:
print(f"{key}月{i}日黑色星期5")
black_week5 += 1
y_week += 1
if y_week > 7:
y_week = 1
time.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/