【蓝桥杯简单篇】Python组刷题日寄Part07

刷题日记?刷题日寄!
萌新备战蓝桥杯python组
发现有需要纠正的地方,烦请指正!
欢迎小伙伴们的三连+关注!

往期系列:
【蓝桥杯简单篇】Python组刷题日寄Part01

【蓝桥杯简单篇】Python组刷题日寄Part02

【蓝桥杯简单篇】Python组刷题日寄Part03

【蓝桥杯简单篇】Python组刷题日寄Part04

【蓝桥杯简单篇】Python组刷题日寄Part05

【蓝桥杯简单篇】Python组刷题日寄Part06

简单篇07

【蓝桥杯简单篇】Python组刷题日寄Part07

  • 第01题:散列存储
  • 第02题:字符串比较
  • 第03题:杨辉三角
  • 第04题:输出全排列
  • 第05题:整除问题
  • 第06题:A+B+C+D
  • 第07题:扑克排序
  • 第08题:删除重复元素
  • 第09题:幸运顾客
  • 第10题:求指数

第01题:散列存储

题目:
时间限制:
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) (m30),每行都是一个 1 ∼ n 1\sim n 1n 的全排列,

接下来一行,是一个待询问的全排列。
输出描述:
输出一行。如果出现过,输出 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')

第02题:字符串比较

题目:
时间限制:
1s
内存限制:
128MB
题目描述:
给出了 n ( n ≤ 100000 ) n(n\leq 100000) n(n100000) 个由数字和字母组成的字符串(长度小于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)

第03题:杨辉三角

题目:
时间限制:
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])

第04题:输出全排列

题目:
时间限制:
1s
内存限制:
128MB
题目描述:
给出一个数 n n n,要求你输出 1 1 1 n n n 的全排列(要求字典序从小到大) ( n ≤ 10 ) (n\leq 10) (n10)
输入描述:
一个数 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()


第05题:整除问题

题目:
时间限制:
1s
内存限制:
128MB
题目描述:
给出一个数,能被多少个数整除?
输入描述:
一个正整数 n ( n ≤ 100000 ) n(n\leq 100000) n(n100000)
输出描述:
输出一行,包含一个数,表示答案。
样例输入:
6
样例输出:
4


答案:

分析:
略。

n = int(input())
count = 0
for i in range(1, n+1):
    if n%i == 0:
        count += 1
print(count)

第06题:A+B+C+D

题目:
时间限制:
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) (T100),代表数据组数 z z z。 接下 T T T 行,每行一个正整数 E E E E ≤ 1000 E ≤ 1000 E1000,含义在题面中已经说明
输出描述:
对于每个 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!} (3e1)=3!(e1)(e2)(e3)

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))

第07题:扑克排序

题目:
时间限制:
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=' ')

第08题:删除重复元素

题目:
时间限制:
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)

第09题:幸运顾客

题目:
时间限制:
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 x0,表示有一顾客抽取了号码 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)

第10题:求指数

题目:
时间限制:
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='')

你可能感兴趣的:(#,蓝桥杯Python组刷题日寄,数据结构&算法,Python学习笔记,蓝桥杯,python,职场和发展)