历年蓝桥杯Python青少组中/高级国赛省赛真题解析 | 2021年4月(省赛)编程题(6-11)

学习Python从娃娃抓起!记录下蓝桥杯备考学习过程中的题目,记录每一个瞬间。
附上汇总贴:历年蓝桥杯Python青少组中/高级国赛省赛真题解析 | 汇总


第6题

【题目描述】

给定一个正整数N,计算N除以7的商。

【输入】

一个正整数N

【输出】

N除以7的商(商为整数)

【输入样例】

8

【输出样例】

1

【代码详解】

n = int(input())
print(n//7)

【运行结果】

8
1

第7题

【题目描述】

给定一个正整数N,计算出1到N之间所有奇数的和

【输入】

一个正整数N

【输出】

1到N之间(包含1和N)所有奇数的和

【输入样例】

5

【输出样例】

9

【代码详解】

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

【运行结果】

5
9

第8题

【题目描述】

提示信息:

“水仙花数”是指一个三位正整数,其各位数字立方的和等于该数本身。

例如:153是一个“水仙花”数,因为1+5+3等于153。

给定一个正整数N,判断100到N之间有多少个“水仙花数”。

【输入】

输入一个正整数N(100<N<1000)

【输出】

输出100到N之间(包含100和N)有多少个“水仙花数”

【输入样例】

160

【输出样例】

1

【代码详解】

n = int(input())
cnt = 0
def check(x):
    x = str(x)
    # print("x", x)
    tot = 0
    for c in x:
        tot += int(c)**3
    return tot == int(x)
for i in range(100, n+1):
    if check(i):
        cnt += 1
print(cnt)

【运行结果】

160
1

第9题

【题目描述】

有一组连续正整数,随机乱序后生成一组数据后,小蓝不小心删掉了其中一个数,已知所删掉的这个数不是这组数据中最小的也不是最大的,现在请你编写程序帮助小蓝找到删除的那个数。

【输入】

按照“编程实现”中的描述模仿输入一组这样的正整数(正整数之间以英文逗号隔开),在输入的时候少一个数(这个数不是这组数据中最小的也不是最大的),这个数作为小蓝删除的那个数,且加上小蓝删除的那个数这组数据是连续的

【输出】

输出删除掉的那个数

【输入样例】

3,2,4,6,7

【输出样例】

5

【代码详解】

ls = [int(i) for i in input().split(',')]
ls = sorted(ls)
tot = 0
for i in range(ls[0], ls[-1]+1):
    tot += i
# print(tot)
print(tot - sum(ls))

【运行结果】

3,2,4,6,7
5

第10题

【题目描述】

提示信息:

有一个密室逃脱游戏,有100间密室连在一排。密室编号是从1开始连续排列已知排到第100间密室,如下图:

|1|2|3|4|5|6|…|99|100|

游戏规则:

  1. 玩家初始位置在1号密室;
  2. 每次玩家可以进入右边的一个密室,也可以跳过一个密室进入下个密室(如:当玩家当前在3号密室,他可以进入4号密室也可以进入5号密室);
  3. 有毒气的密室不能进入需要避开。

给定三个正整数X,Y,M( X < Y < M ≤ 100 X\lt Y\lt M\le 100 X<Y<M100),表示三个密室编号。X号密室和Y号密室有毒气泄露,不能进入,玩家需要进入到M号密室。按照游戏规则进入M号密室有多少种路线方案。

例如:X=2,Y=4,M=7,进入M号密室有2种路线方案,分别是1->3->5->6->7路线和1->3->5->7路线。

【输入】

三个正整数X,Y,M( X ≤ Y ≤ M X\le Y\le M XYM),X和Y表示有毒气密室编号,M表示需要进入的密室编号,且三个正整数之间以英文逗号隔开

【输出】

进入M号密室有多少种路线方案

【输入样例】

2,4,7

【输出样例】

2

【代码详解】

#f(n) = f(n-1) + f(n-2)

x,y,m = [int(i) for i in input().split(",")]
f = [0, 1]
for i in range(2, m+1):
    if i == x or i == y:
        f.append(0)
    else:
        f.append(f[i-1]+f[i-2])

print(f[-1])

【运行结果】

2,4,7
2

第11题

【题目描述】

有一个N * N的矩阵方格和N个棋子,现在需要将N个棋子按要求放置到矩阵方格中。
要求如下:
1.任意两个棋子不能在同一行
2.任意两个棋子不能在同一列
3.任意两个棋子不能在同一对角线上(下图红色线段都为对角线)

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

根据以上要求,问N个棋子放置到N * N矩阵方格中有多少种放置方案
例如:4 * 4的矩阵方格,4个棋子,有2种放置方案

在这里插入图片描述

【输入】

输入一个正整数 N(1<N<11),表示一个 N*N 的矩阵方格和 N 个棋子数量

【输出】

输出 N 个棋子按要求放置到N * N的矩阵方格中有多少种放置方案

【输入样例】

4

【输出样例】

2

【代码详解】

N = int(input())

chess = [['O' for i in range(N)] for j in range(N)]

def checkcol(col):
    for row in range(N):
        if chess[row][col] == 'X':
            return False
    return True

def checkslant(row, col):
    for k in range(1, N):
        d = [(k,k), (-k,-k), (k,-k), (-k,k)]
        for i,j in d:
            if 0<=row+i<N and 0<=col+j<N and chess[row+i][col+j] == 'X':

                return False
    return True

def dfs(row):
    global cnt
    if row == N:
        # for i in chess:
        #     for j in i:
        #         print(j, end=' ')
        #     print()
        # print()
        cnt += 1
        return
    for col in range(N):
        if checkcol(col) and checkslant(row, col):
            chess[row][col] = 'X'
            dfs(row+1)
            chess[row][col] = 'O'
cnt = 0
dfs(0)
print(cnt)

【运行结果】

4
2
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值