刷题日记?刷题日寄!
萌新备战蓝桥杯python组
发现有需要纠正的地方,烦请指正!
欢迎小伙伴们的三连+关注!
往期系列:
【蓝桥杯简单篇】Python组刷题日寄Part01
【蓝桥杯简单篇】Python组刷题日寄Part02
【蓝桥杯简单篇】Python组刷题日寄Part03
【蓝桥杯简单篇】Python组刷题日寄Part04
【蓝桥杯简单篇】Python组刷题日寄Part05
【蓝桥杯简单篇】Python组刷题日寄Part06
简单篇07
题目:
时间限制:
1s
内存限制:
128MB
题目描述:
给出了几个长度为 n ( n < 20 ) n(n<20) n(n<20) 的全排列,求某个全排列是否在上述的位置出现过。
输入描述:
第一行是数字 n , m n, m n,m,表示全排列的长度和个数
接下来 m m m 行 ( m ≤ 30 ) (m\leq 30) (m≤30),每行都是一个 1 ∼ n 1\sim n 1∼n 的全排列,
接下来一行,是一个待询问的全排列。
输出描述:
输出一行。如果出现过,输出 Yes,否则输出 No
样例输入:
6 3
6 3 5 4 2 1
1 5 3 4 2 6
6 1 2 4 5 3
6 3 5 4 2 1
样例输出:
Yes
答案:
分析:
利用列表的in
操作判断。
n, m = map(int, input().split())
lis = []
for i in range(m):
temp = list(map(int, input().split()))
lis.append(temp)
s = list(map(int, input().split()))
if s in lis:
print('Yes')
else:
print('No')
题目:
时间限制:
1s
内存限制:
128MB
题目描述:
给出了 n ( n ≤ 100000 ) n(n\leq 100000) n(n≤100000) 个由数字和字母组成的字符串(长度小于1000),求与给出字符串相同字符串的个数。
输入描述:
第一行是一个数 n n n。
接下来 n n n 行,每行都是一个字符串。
接下来一行,是待查询的字符串。
输出描述:
输出一行,一个数。表示与待查询字符串相同的字符串个数。
样例输入:
6
ase
eet
ase
see3
awqol
sss
ase
样例输出:
2
答案:
分析:
循环遍历即可。
n = int(input())
lis = []
for i in range(n):
temp = input()
lis.append(temp)
s = input()
count = 0
for i in lis:
if s == i:
count += 1
print(count)
题目:
时间限制:
1s
内存限制:
128MB
题目描述:
对杨辉三角陌生吗?
下面请你求出:杨辉三角中,第 i i i 行 j j j 列的数据
1
1 1
1 2 1
1 3 3 1
……
这里 i i i 和 j j j 均小于等于1000
输入描述:
两个数 i i i 和 j j j,表示行和列。
输出描述:
一个数,表示相应的数字。
样例输入:
3 2
样例输出:
2
答案:
分析:
n, m = map(int, input().split())
MAX = max(n, m)
dp = [[0 for j in range(MAX)] for i in range(MAX)]
for i in range(n):
for j in range(i+1):
if j == 0:
dp[i][j] = 1
elif i == j:
dp[i][j] = 1
else:
dp[i][j] = dp[i-1][j-1] + dp[i-1][j]
print(dp[n-1][m-1])
题目:
时间限制:
1s
内存限制:
128MB
题目描述:
给出一个数 n n n,要求你输出 1 1 1 到 n n n 的全排列(要求字典序从小到大) ( n ≤ 10 ) (n\leq 10) (n≤10)
输入描述:
一个数 n n n
输出描述:
包括若干行,每行包含 n n n 个数,表示相应的全排列值。
样例输入:
4
样例输出:
1 2 3 4
1 2 4 3
1 3 2 4
1 3 4 2
1 4 2 3
1 4 3 2
2 1 3 4
2 1 4 3
2 3 1 4
2 3 4 1
2 4 1 3
2 4 3 1
3 1 2 4
3 1 4 2
3 2 1 4
3 2 4 1
3 4 1 2
3 4 2 1
4 1 2 3
4 1 3 2
4 2 1 3
4 2 3 1
4 3 1 2
4 3 2 1
答案:
分析:
利用itertools
库中的permutations
函数,其会返回迭代对象的所有全排列。
from itertools import permutations as pmt
n = int(input())
lis = []
for i in range(1, n+1):
lis.append(i)
full = list(pmt(lis, n))
for i in full:
for j in i:
print(j, end=' ')
print()
题目:
时间限制:
1s
内存限制:
128MB
题目描述:
给出一个数,能被多少个数整除?
输入描述:
一个正整数 n ( n ≤ 100000 ) n(n\leq 100000) n(n≤100000)。
输出描述:
输出一行,包含一个数,表示答案。
样例输入:
6
样例输出:
4
答案:
分析:
略。
n = int(input())
count = 0
for i in range(1, n+1):
if n%i == 0:
count += 1
print(count)
题目:
时间限制:
1s
内存限制:
128MB
题目描述:
我们都喜欢 A + B A+B A+B 问题,现在我们遇到了它的一个变形问题,给定 A + B + C + D = E A + B + C + D = E A+B+C+D=E 的形式,并且规定 A , B , C , D , E A,B,C,D,E A,B,C,D,E 都是正整数。现在已经知道了 E E E 的大小, 请问有多少对不同的 ( A , B , C , D ) (A,B,C,D) (A,B,C,D) 满足 A + B + C + D = E A + B + C + D = E A+B+C+D=E, ( A , B , C , D ) (A,B,C,D) (A,B,C,D) 与 ( A ′ , B ′ , C ′ , D ′ ) (A′,B′,C′,D′) (A′,B′,C′,D′),被认为不同当且仅当 A ̸= A′
或 B ̸= B′
或 C ̸= C′
或 D ̸= D′
。
输入描述:
有多组数据,输入开始的第一行是一个整数 T T T, ( T ≤ 100 ) (T ≤100) (T≤100),代表数据组数 z z z。 接下 T T T 行,每行一个正整数 E E E, E ≤ 1000 E ≤ 1000 E≤1000,含义在题面中已经说明
输出描述:
对于每个 E E E,输出一行,包含一个整数,代表符合条件的 ( A , B , C , D ) (A,B,C,D) (A,B,C,D) 的对数。
样例输入:
3
1
5
100
样例输出:
0
4
156849
答案:
分析:
隔板法,即往e-1
个间隔中放入3个隔板,因此结果为: ( e − 1 3 ) = ( e − 1 ) ( e − 2 ) ( e − 3 ) 3 ! \large \tbinom{e-1}{3}=\frac{(e-1)(e-2)(e-3)}{3!} (3e−1)=3!(e−1)(e−2)(e−3)
T = int(input())
lis = []
for i in range(T):
lis.append(int(input()))
for i in lis:
result = (i-1) * (i-2) * (i-3) / 6
print(int(result))
题目:
时间限制:
1s
内存限制:
128MB
题目描述:
扑克牌排序:构造扑克牌数组,对扑克牌进行排序。排序原则如下:数字从小到大是2-10、J、Q、K和A,花色从小到大是方块(diamond)、梅花(club)、红桃(heart)、黑桃(spade)。两张牌比较时先看数字,数字相同时看花色。要求对输入的扑克牌进行从小到大排序。
输入五张牌(表示黑桃2、红桃3、黑桃3、方块A和梅花J): 2s3h3sAdJc
输出结果应为:2s 3h 3s Jc Ad数组长度固定为5。
输入描述:
输入五张牌(表示黑桃2、红桃3、黑桃3、方块A和梅花J): 2s3h3sAdJc
输出描述:
输出结果应为:2s 3h 3s Jc Ad数组长度固定为5。
样例输入:
无
样例输出:
无
答案:
分析:
利用列表的list.sort(key=(lambda))
方法,具体见代码注释。
s = input().replace('10', 't') # 10占2位,变成1位便于处理
NUM = ['2', '3', '4', '5', '6', '7', '8', '9', 't', 'J', 'Q', 'K', 'A']
DECOR = ['d', 'c', 'h', 's']
num = s[::2] # 取出每张牌数字
decor = s[1::2] # 取出每张牌花色
lis = []
for i in range(len(num)):
n, d = num[i], decor[i]
temp = [n, d, NUM.index(n), DECOR.index(d)]
# 数字,花色,数字的顺序,花色顺序
lis.append(temp)
lis.sort(key=(lambda x:x[-1])) # 先根据花色排序
lis.sort(key=(lambda x:x[-2])) # 再根据数字排序
for i in lis:
if i[0] == 't':
print('10'+i[1], end=' ')
else:
print(i[0]+i[1], end=' ')
题目:
时间限制:
1s
内存限制:
128MB
题目描述:
为库设计新函数DelPack,删除输入字符串中所有的重复元素。不连续的重复元素也要删除。
要求写成函数,函数内部使用指针操作。
输入描述:
1223445667889
输出描述:
13579
样例输入:
else
样例输出:
ls
答案:
分析:
利用列表的copy()
和remove()
方法。
def DelPack(s):
for i in s:
temp = s.copy()
temp.remove(i)
if i not in temp:
print(i, end='')
s = list(input())
DelPack(s)
题目:
时间限制:
1s
内存限制:
128MB
题目描述:
为了吸引更多的顾客,某商场决定推行有奖抽彩活动。“本商场每日将产生一名幸运顾客,凡购买 30 30 30元以上商品者均有机会获得本商场提供的一份精美礼品。”该商场的幸运顾客产生方式十分奇特:每位顾客可至抽奖台抽取一个幸运号码,该商场在抽奖活动推出的第 i i i 天将从所有顾客中(包括不在本日购物满 30 30 30 元者)挑出幸运号第 i i i 小的顾客作为当日的幸运顾客。该商场的商品本就价廉物美,自从有奖活动推出后,顾客更是络绎不绝,因此急需你编写一个程序,为他解决幸运顾客的产生问题。
输入描述:
第 1 1 1 行一个整数 N N N,表示命令数。
第 2 ∼ ( N + 1 ) 2\sim (N+1) 2∼(N+1)行,每行一个数,表示命令。如果 x ≥ 0 x\geq 0 x≥0,表示有一顾客抽取了号码 x x x;如果 x = − 1 x=-1 x=−1,表示傍晚抽取该日的幸运号码。
输出描述:
对应各命令 − 1 -1 −1 输出幸运号码;每行一个号码。(两个相同的幸运号看作两个号码)
样例输入:
6
3
4
-1
-1
3
-1
样例输出:
3
4
4
答案:
分析:
见代码注释。
N = int(input())
lis = [] # 保存幸运号
count = 0 # 记抽号天数
result = [] # 保存输出结果
for i in range(N):
num = int(input())
if num >= 0:
lis.append(num)
lis.sort() # 排序
else:
result.append(lis[count])
count += 1
for i in result:
print(i)
题目:
时间限制:
1s
内存限制:
128MB
题目描述:
已知n和m,打印 n 1 , n 2 , . . . , n m n^1, n^2, ..., n^m n1,n2,...,nm。要求用静态变量实现。 n m n^m nm 表示 n n n 的 m m m 次方。已知 n n n 和 m m m,打印 n 1 , n 2 , . . . , n m n^1, n^2, ..., n^m n1,n2,...,nm。要求用静态变量实现。 n m n^m nm 表示 n n n 的 m m m 次方。(每行显示5个数,每个数宽为12,右对齐)
输入描述:
一个满足题目要求的输入范例。
输出描述:
与上面的样例输入对应的输出。
样例输入:
无
样例输出:
无
答案:
分析:
格式化输出。{:>12d}
表示数宽12位,右对齐。
n, m = map(int, input().split())
count = 0
for i in range(1, m+1):
if count < 5:
count += 1
else:
print()
count = 0
print('{:>12d}'.format(n ** i), end='')