第五届CCF PTA Python编程培训师资认证(P试卷)

第一题 卫星发射

试题名称:卫星发射

时间限制: 1.0s

内存限制: 128.0MB

【问题描述】

在 2050 年卫星发射技术已经得到极大发展,我国将援助 A 国建立远轨道卫星导航系统,该项目计划第一个天发射一颗卫星;之后两天(第二天和第三天),每天发射两颗卫星;之后三天(第四、五、六天),每天发射三颗卫星;之后四天(第七、八、九、十天),每天发射四颗卫星......;这种卫星发射模式会一直延续到项目完成:当连续 n 天每天发射 n 颗卫星后,航天局在之后的连续 n+1 天里,每天发射 n+1 颗卫星。

请计算在前 k 天里,一共发射了多少卫星。

【输入描述】

一个正整数 k,表示发射卫星的天数。

【输出描述】

一个正整数,即发射卫星的总数。

【输入样例】

6

【输出样例】

14

【样例 1 说明】

航天局第一天发射一颗卫星;第二天和第三天,每天发射两颗卫星;第四、五、六天,每天发射三颗卫星。因此一共发射 1+2+2+3+3+3=14 颗卫星。

【数据规模】

对于 100%的数据, 1≤k≤10^4。

python 复制代码
k=int(input())
n=1
wx=0
while n<=k:
    wx+=n*n
    k-=n
    n+=1
if k!=0:
    wx+=n*k
print(wx)

第二题 伯罗奔尼撒箭阵

试题名称:伯罗奔尼撒箭阵

时间限制: 1.0s

内存限制: 128.0MB

【问题描述】

在伯罗奔尼撒战争中,为了应对敌方的箭阵,指挥官正在研究一种新的列队方式,为了方便士兵理解,抽象如下:给出正整数 n,要求按如下方式构造数列:

  1. 只有一个数字 n 的数列是一个合法的数列。
  2. 在一个合法的数列的末尾加入一个正整数,但是这个正整数不能超过该数列最后一项的一半,可以得到一个新的合法数列。
    请你帮助指挥官求出,一共有多少个合法的数列。两个合法数列 a, b 不同当且仅当两数列长度不同或
    存在一个正整数 i≤∣a∣,使得 ai ≠bi。
    【输入描述】
    输入只有一行一个整数,表示 n。
    【输出描述】
    输出一行一个整数,表示合法的数列个数。
    【输入样例】
    6
    【输出样例】
    6
    样例 1 解释
    满足条件的数列为:
    6
    6,1
    6,2
    6,3
    6,2,1
    6,3,1
    【数据规模】
    数据保证,对于全部的测试点,保证 1≤n≤10^3。
python 复制代码
def f(n):
    global count
    b=n//2
    count+=b
    for i in range(2,b+1):
        f(i)

count=1
n=int(input())
f(n)
print(count)

第三题 天空之城的树

试题名称:天空之城的树

时间限制: 1.0s

内存限制: 128.0MB

【问题描述】

拉姆达人在修建天空之城时,主要是依赖巨大的飞行石去维持悬空状态,依赖强壮的大树去作为建筑物的框架,假设大树是一棵有 n(n≤10^3)个结点的二叉树。给出每个结点的两个子结点编号(均不超过 n),建立一棵二叉树(根节点的编号为 1),如果是叶子结点,则输入 0 0。

建好这棵二叉树之后,请帮拉姆达设计师求出它的深度。二叉树的深度是指从根节点到叶子结点时,最多经过了几层。

【输入描述】

第一行一个整数 n,表示结点数。

之后 n 行,第 i 行两个整数 l、r,分别表示结点 i 的左右子结点编号。若 l=0 则表示无左子结点,r=0 同理。

【输出描述】

一个整数,表示最大结点深度。

【输入样例】

7

2 7

3 6

4 5

0 0

0 0

0 0

0 0

【输出样例】

4

【数据规模】

数据保证,对于全部的测试点,保证 1≤n≤10^3。

python 复制代码
"""
解题思路:
数据范围在10^3之内,可以使用深度优先搜索计算结果
使用两个数组分别记录左右子树情况
分别搜索左右子树,不断寻找最大深度
注意输入的数据需要按空格拆分
"""
depth=0
def dfs(node,dep):
    if node==0:
        return
    global depth
    depth=max(depth,dep)
    dfs(lst_l[node-1],dep+1)
    dfs(lst_r[node-1],dep+1)  

n=int(input())
lst=[list(map(int,input().split()))for _ in range(n)]
lst_l=[i[0] for i in lst]
lst_r=[i[1] for i in lst]
dfs(1,1)
print(depth)

第四题 最后的王者

试题名称:最后的王者

时间限制: 1.0s

内存限制: 128.0MB

【问题描述】

学校的编程兴趣班提出了一个有趣的问题:假设键盘输入一个高精度的正整数 n(不超过 250 位),去掉其中任意 k 个数字后剩下的数字按原左右次序将组成一个新的非负整数。编程对给定的 n 和 k,寻找一种方案使得剩下的数字组成的新数最小。试着帮他们给出解决方案。

【输入描述】

输入两行正整数。

第一行输入一个高精度的正整数 n。

第二行输入一个正整数 k,表示需要删除的数字个数。

【输出描述】

输出一个整数,最后剩下的最小数。

【输入样例】

175438

4

【输出样例】

13

python 复制代码
s=input()
l=len(s)
s=s+"0"
k=int(input())
need=l-k
while k>0:
    for i in range(l):
        if s[i]>s[i+1]:
            s = s[:i]+ s[i+1:]
            #print(s)
            break
    l=l-1
    k=k-1
print(int(s[:need]))

第五题 矩阵取数

试题名称:矩阵取数

时间限制: 1.0s

内存限制: 128.0MB

【问题描述】

淘淘设计了一个矩阵取数游戏:对于一个给定的 n×m 的矩阵,矩阵中的每个元素 ai,j 均为非负整数。游戏规则如下:

  1. 每次取数时须从每行各取走一个元素,共 n 个。经过 m 次后取完矩阵内所有元素;
  2. 每次取走的各个元素只能是该元素所在行的行首或行尾;
  3. 每次取数都有一个得分值,为每行取数的得分之和,每行取数的得分 = 被取走的元素值 ×2^i,其中 i 表示第 i 次取数(从 1 开始编号);
  4. 游戏结束总得分为 m 次取数得分之和。
    帅帅想请你帮忙写一个程序,对于任意矩阵,可以求出取数后的最大得分。
    【输入描述】
    输入文件包括 n+1 行:
    第一行为两个用空格隔开的整数 n 和 m。
    第 2∼n+1 行为 n×m 矩阵,其中每行有 m 个用单个空格隔开的非负整数。
    【输出描述】
    输出文件仅包含 1 行,为一个整数,即输入矩阵取数后的最大得分。
    【输入样例】
    2 3
    1 2 3
    3 4 2
    【输出样例】
    82
    【数据规模】
    对于 60% 的数据,满足 1≤n,m≤30,答案不超过 10^16。
    对于 100% 的数据,满足 1≤n,m≤80,0≤ai,j≤1000。
python 复制代码
def getSum(lst,c=1):
    global s
    if not lst:
        return s
    if lst[0]<lst[-1]:
        s+=lst.pop(0)*(2**c)
    else:
        s+=lst.pop(-1)*(2**c)
    return getSum(lst,c+1)

n,m=map(int,input().split())
bs=0
for i in range(n):
    s=0
    lst=list(map(int,input().split()))
    bs+=getSum(lst)
print(bs)
相关推荐
这个男人是小帅23 分钟前
【GAT】 代码详解 (1) 运行方法【pytorch】可运行版本
人工智能·pytorch·python·深度学习·分类
爱吃生蚝的于勒1 小时前
C语言内存函数
c语言·开发语言·数据结构·c++·学习·算法
小白学大数据3 小时前
Python爬虫开发中的分析与方案制定
开发语言·c++·爬虫·python
Shy9604184 小时前
Doc2Vec句子向量
python·语言模型
ChoSeitaku7 小时前
链表循环及差集相关算法题|判断循环双链表是否对称|两循环单链表合并成循环链表|使双向循环链表有序|单循环链表改双向循环链表|两链表的差集(C)
c语言·算法·链表
Fuxiao___7 小时前
不使用递归的决策树生成算法
算法
我爱工作&工作love我7 小时前
1435:【例题3】曲线 一本通 代替三分
c++·算法
秀儿还能再秀7 小时前
机器学习——简单线性回归、逻辑回归
笔记·python·学习·机器学习
白-胖-子8 小时前
【蓝桥等考C++真题】蓝桥杯等级考试C++组第13级L13真题原题(含答案)-统计数字
开发语言·c++·算法·蓝桥杯·等考·13级
workflower8 小时前
数据结构练习题和答案
数据结构·算法·链表·线性回归