刷题日记?刷题日寄!
萌新备战蓝桥杯python组
发现有需要纠正的地方,烦请指正!
欢迎小伙伴们的三连+关注!
往期系列:
【蓝桥杯简单篇】Python组刷题日寄Part01
【蓝桥杯简单篇】Python组刷题日寄Part02
【蓝桥杯简单篇】Python组刷题日寄Part03
【蓝桥杯简单篇】Python组刷题日寄Part04
【蓝桥杯简单篇】Python组刷题日寄Part05
简单篇06
题目:
时间限制:
1s
内存限制:
128MB
题目描述:
编写函数,删除数组中所有值为0的元素,其后元素向数组首端移动。
输入时首先读入数组长度,再依次读入每个元素。
将调用此函数后得到的数组和函数返回值输出。
输入描述:
第一行一个数,表示数组个数
第二行为每个数字,空格分开
输出描述:
输出处理后的数字以及个数,各占一行
样例输入:
7
2 0 4 3 0 0 5
样例输出:
2 4 3 5
4
答案:
分析:
无
n = int(input())
num = list(map(int, input().split()))
def func(n, num):
tag = 0
for i in num:
if i!=0:
print(i, end=' ')
tag += 1
print()
print(tag)
func(n, num)
题目:
时间限制:
1s
内存限制:
128MB
题目描述:
编写并测试如下函数:
void Add (int a[], int m, int b[], int n)
;
该函数将数组 b
的前 n
个元素追加到数组 a
的前 m
个元素后,假定数组 a
具有至少存放 m+n
个元素的空间。例如,如果数组 a
为 {22,33,44,55,66,77,88,99}
,数组 b
为{20,30,40,50,60,70,80,90}
,则调用 Add(a,5,b,3)
后,将把数组 a
变为 {22,33,44,55,66,20,30,40}
。注意数组 b
并没有改变,而且数组 a
中只需改变 n
个元素。
输入描述:
4行。第一行为两个整数:m,n
,并以空格隔开,分别表示将要输入的数组 a
和数组 b
的元素的个数。第二行为 m
个整数,为数组 a
的元素;第三行为 n
个整数,为数组 b
的元素。第四行为两个整数 m1,n1
,表示把数组 b
的前 n1
个元素追加到数组 a
的前 m1
个元素后。
输出描述:
1行。为最后数组 a
中的元素,两个元素之间以逗号隔开。最后一个元素没有
样例输入:
8 8
1 2 3 4 5 6 7 8
9 10 11 12 13 14 15 16
4 5
样例输出:
1,2,3,4,9,10,11,12,13
答案:
分析:
注意最后要判断m1 + n1 < m
,若为True
,则需要补上a
的第m1 + n1
之后的元素。
m, n = map(int, input().split())
a = list(input().split())
b = list(input().split())
m1, n1 = map(int, input().split())
result = a[0:m1] + b[0:n1]
if m1 + n1 < m:
result.extend(a[m1+n1:])
print(','.join(result))
题目:
时间限制:
1s
内存限制:
128MB
题目描述:
已知2007年1月1日为星期一。
设计一函数按照下述格式打印2007年以后(含)某年某月的日历,2007年以前的拒绝打印。
为完成此函数,设计必要的辅助函数可能也是必要的。其中输入为年分和月份。
注意:短线“-”个数要与题目中一致,否则系统会判为错误。
输入描述:
年月和月份
输出描述:
无
样例输入:
2010 9
样例输出:
---------------------
Su Mo Tu We Th Fr Sa
---------------------
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30
---------------------
答案:
分析:
利用calendar
库
import calendar as cld
y, m = map(int, input().split())
cld.setfirstweekday(firstweekday=6)
result = cld.month(y, m)
result = result.split('\n')
print('---------------------')
print(' ' + result[1])
print('---------------------')
for i in result[2:-1]:
print(' ' + i)
print('---------------------')
题目:
时间限制:
1s
内存限制:
128MB
题目描述:
输入一个正整数 n ( 1 ≤ n ≤ 6 ) n(1≤ n ≤6) n(1≤n≤6),再输入一个 n n n 行 n n n 列的矩阵,找出该矩阵中绝对值最大的元素以及它的行下标和列下标。
输入描述:
n
nxn
输出描述:
数 行 列
样例输入:
2
1 2
3 4
样例输出:
4 2 2
答案:
分析:
对输入的每行数据操作,选出最大值,并确定坐标,以元组形式存入列表中,并用list.sort(key=lambda)
实现排序后输出目标值。
n = int(input())
ma = []
for i in range(1, n+1):
lis = list(map(int, input().split()))
a = max(lis)
ma.append((a, i, lis.index(a)+1))
ma.sort(key=lambda x:x[0])
for i in ma[-1]:
print(i, end=' ')
题目:
时间限制:
1s
内存限制:
128MB
题目描述:
编写程序,输入一批学生的成绩,遇0或负数则输入结束,要求统计并输出优秀(大于85)、通过(60~84)和不及格(小于60)的学生人数。
输入描述:
一批学生成绩,遇0结束
输出描述:
输出各个成绩段的人数
样例输入:
88 71 68 70 59 81 91 42 66 77 83 0
样例输出:
>=85:2
60-84:7
<60:2
答案:
分析:
本题需要注意输入遇到 0 或者负数时输入结束
s = list(map(int, input().split()))
while min(s)>0: # 遇0或负数则输入结束
s.extend(list(map(int,input().split())))
a = b = c = 0
for i in s:
if i >= 85:
a += 1
elif 60 <= i < 85:
b += 1
elif 0 < i <60:
c += 1
else:
break
print(f""">=85:{a}
60-84:{b}
<60:{c}""")
题目:
时间限制:
1s
内存限制:
128MB
题目描述:
输入两个点的坐标,即 p 1 = ( x 1 , y 1 ) p1 = (x1, y1) p1=(x1,y1) 和 p 2 = ( x 2 , y 2 ) p2=(x2, y2) p2=(x2,y2),求过这两个点的直线的斜率。如果斜率为无穷大输出“INF”。
输入描述:
两个点的坐标,各占一行,都为整数
x1,y1
x2,y2
输出描述:
两个点组成直线的斜率(都为整数),无穷大则输出“INF”。
样例输入:
1 2
1 4
样例输出:
INF
答案:
分析:
x1, y1 = map(int, input().split())
x2, y2 = map(int, input().split())
if x1 == x2:
print('INF')
else:
print(int((y2-y1)/(x2-x1)))
题目:
时间限制:
1s
内存限制:
128MB
题目描述:
新生舞会开始了。n名新生每人有三个属性:姓名、学号、性别。其中,姓名用长度不超过20的仅由大小写字母构成的字符串表示,学号用长度不超过10的仅由数字构成的字符串表示,性别用一个大写字符‘F’或‘M’表示。任意两人的姓名、学号均互不相同。换言之,每个人可被其姓名或学号唯一确定。给出m对两人的信息(姓名或学号),判断他们是否能共舞。两人能共舞的充要条件为两人性别相异。
提示:
可以把名字和学号都当成字符串处理。
输入描述:
第一行一个整数 n ( 2 ≤ n ≤ 1000 ) n(2\leq n\leq 1000) n(2≤n≤1000),表示学生人数。接下来的n行每行依次包含一名新生的姓名、学号、性别,分别用一个空格隔开。
之后的一行是一个整数 m ( 1 ≤ m ≤ 1000 ) m(1\leq m\leq 1000) m(1≤m≤1000),表示询问的数目。接着的m行每行包含两个信息(姓名或学号),保证两个信息不属于同一人,中间用一个空格隔开。
输出描述:
对于每个询问输出一行,如果两人可以共舞,输出一个大写字母‘Y’,否则输出一个大写字母‘N’。
样例输入:
4
John 10 M
Jack 11 M
Kate 20 F
Jim 21 M
3
John 11
20 Jack
Jim Jack
样例输出:
N
Y
N
答案:
分析:
利用字典。
n = int(input())
dic = {}
for i in range(n):
name, ID, gender = input().split()
dic[name] = gender
dic[ID] = gender
m = int(input())
lis = []
for i in range(m):
temp = list(input().split())
lis.append(temp)
for i in lis:
if dic[i[0]] != dic[i[1]]:
print('Y')
else:
print('N')
题目:
时间限制:
1s
内存限制:
128MB
题目描述:
字符串可是比赛经常出的问题,那么给大家出一个题,输入五个字符串,输出5个字符串当中最长的字符串。每个字符串长度在100以内,且全为小写字母。
输入描述:
五行字符串,共占一行
输出描述:
最长的字符串
样例输入:
one two three four five
样例输出:
three
答案:
分析:
略
strlist = list(input().split())
MAX = 0
result = ''
for i in strlist:
if len(i) > MAX:
result = i
MAX = len(i)
print(result)
题目:
时间限制:
1s
内存限制:
128MB
题目描述:
小明决定从下周一开始努力刷题准备蓝桥杯竞赛。他计划周一至周五每天做 a 道题目,周六和周日每天做 b 道题目。请你帮小明计算,按照计划他将在第几天实现做题数大于等于 n 题?
输入描述:
输入一行包含三个整数 a, b 和 n.
输出描述:
输出一个整数代表天数。
样例输入:
10 20 99
样例输出:
8
答案:
分析:
本题思路并不困难,但本人在做的时候刚开始出现了时间超限的情况,可能是因为代码中使用%
的次数过多。
a, b, n = map(int, input().split())
finish_week = 5 * a + 2 * b # 计算一周的完成题量
weeks = n // finish_week # 已过周数
left = n - weeks * finish_week # 剩余题量
days = 7 * weeks # 天数
if left>0:
for i in range(1, 8):
if i <= 5:
days += 1
left -= a
else:
days += 1
left -= b
if left <= 0:
break
print(days)
题目:
时间限制:
1s
内存限制:
128MB
题目描述:
1234是一个非常特殊的四位数,因为它的各位数之和为10,编程求所有这样的四位十进制数。
输入描述:
无
输出描述:
按从小到大的顺序输出满足条件的四位十进制数。每个数字占用一行。
样例输入:
无
样例输出:
无
答案:
分析:
略
for i in range(1000, 10000):
num = 0
for j in str(i):
num += int(j)
if num == 10:
print(i)