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

第一题 彩虹密码

题目描述
彩虹密码是由一个字符串组成,是由原文字符串(由不超过 60 个小写字母组成)中每个字母向后移动 n 位形成的。z 的下一个字母是 a,如此循环。现在知道移动前的原文字符串及 n,请你求出彩虹密码。

输入格式
第一行:n。第二行:未移动前的一串字母。
输出格式
一行,彩虹密码。

输入输出样例
输入
1
qwe
输出
rxf

说明/提示
字符串长度 ≤60,n 在 int 范围内。

n=int(input())
s=input()
xs=""
for i in s:m=ord(i)+nif m>ord("z"):mm=96+m%ord("z")c=chr(mm)else:c=chr(m)xs+=c
print(xs)

第二题 神奇的幻方

题目描述
在一个 N×N 的正方形网格中,每个格子分别填上从 1 到 N×N 的正整数,使得正方形中任一行、任一列及对角线的几个数之和都相等,则这种正方形图案就称为“幻方”(输出样例中展示了一个 3×3 的幻方)。我国古代称为“河图”、“洛书”,又叫“纵横图”。
幻方看似神奇,但当 N 为奇数时有很方便的填法:

  1. 一开始正方形中没有填任何数字。首先,在第一行的正中央填上 1。
  2. 从上次填数字的位置向上移动一格,如果已经在第一行,则移到同一列的最后一行;再向右移动一格,如果已经在最右一列,则移动至同一行的第一列。如果移动后的位置没有填数字,则把上次填写的数字的下一个数字填到这个位置。
  3. 如果第 2 步填写失败,则从上次填数字的位置向下移动一格,如果已经在最下一行,则移到同一列的第一行。这个位置一定是空的(这可太神奇了!)。把上次填写的数字的下一个数字填到这个位置。
  4. 重复 2、3 步骤,直到所有格子都被填满,幻方就完成了!
    快来编写一个程序,按上述规则,制作一个 N×N 的幻方吧。

输入格式
输入为一个正奇数 N,保证 3≤N≤21。
输出格式
输出 N 行,每行 N 个空格分隔的正整数,内容为 N×N 的幻方。 输入输出样例

输入
3
输出
8 1 6
3 5 7
4 9 2

n=int(input())
bns=[]
for i in range(n):ns=[0 for j in range(n)]bns.append(ns)
i=1
j=n//2+1
m=1
bns[i-1][j-1]=1
while m!=n*n:m+=1ii=ijj=ji-=1if i<1:ic=nj+=1if j>n:j=1if bns[i-1][j-1]==0: bns[i-1][j-1]=melse:i=iij=jji+=1if i>n:i=1bns[i-1][j-1]=m
for ns in bns:ns=list(map(str,ns))print(" ".join(ns))

第三题 迷宫

题目描述
给定一个 N×M 方格的迷宫,迷宫里有 T 处障碍,障碍处不可通过。
在迷宫中移动有上下左右四种方式,每次只能移动一个方格。数据保证起点上没有障碍。
给定起点坐标和终点坐标,每个方格最多经过一次,问有多少种从起点坐标到终点坐标的方案。

输入格式
第一行为三个正整数 N,M,T,分别表示迷宫的长宽和障碍总数。
第二行为四个正整数 SX,SY,FX,FY,SX,SY 代表起点坐标,FX,FY 代表终点坐标。
接下来 T 行,每行两个正整数,表示障碍点的坐标。
输出格式
输出从起点坐标到终点坐标的方案总数。

输入输出样例
输入
2 2 1
1 1 2 2
1 2
输出
1

说明/提示
对于 100% 的数据, 1≤N,M≤5, 1≤T≤10, 1≤SX,FX≤n,1≤SY,FY≤m

"""
解题思路:
1、使用DFS来找到所有路径数量的方法
2、因为DFS在回溯过程中更容易跟踪路径的生成和销毁。一般适合迷宫较小的。
3、如果迷宫可能包含循环,则需要在DFS实现中添加额外的逻辑来检测和处理循环,以避免无限递归。
"""
def DFS(maze,start,end,visited):#起点等于终点,找到一条路径if start==end:return 1#设置当前节点(位置)已访问visited[start[0]-1][start[1]-1] = True#局部变量计数器,累加来自子递归调用的结果path_count = 0#定义四个方向改变的数据:上 下 左 右directions=[(-1,0),(1,0),(0,-1),(0,1)]#循环访问4个方向for dx,dy in directions:nx,ny=start[0]+dx,start[1]+dy#检查新位置是否在迷宫内且不是障碍且未访问if 1<=nx<=n and 1<=ny<=m and maze[nx-1][ny-1]==1 and visited[nx-1][ny-1]==False:# 递归地搜索新位置path_count+=DFS(maze,(nx,ny),end,visited)# 回溯:撤销对当前节点的访/问标记 visited[start[0]-1][start[1]-1] = False#返回找到的路径数量return path_countn,m,t=list(map(int,input().split()))
# 初始化迷宫(1表示可通行)
maze=[[1]*m for _ in range(n)]
#设置起点、终点
sx,sy,fx,fy=list(map(int,input().split()))
start=(sx,sy)
end=(fx,fy)
# 设置迷宫障碍(0表示障碍)
for i in range(t):x,y=list(map(int,input().split()))maze[x-1][y-1]=0
# 初始化visited数组,所有元素初始化为False 
visited=[[False]*m for _ in range(n)]
# 调用DFS函数计算路径数量 
path_count=DFS(maze,start,end,visited)
print(path_count)

第四题 距离的智慧

题目描述
学校新建造了一个有 N(2≤N≤10^5) 个小隔间的自习室,这些隔间分布在一条直线上,坐标是x1,x2,x3,…xn(0≤xi≤10^9)。为了保持尽可能的安静,减少周边环境的影响,睿智的大树老师想把自习学生安置在指定的隔间,所有自习学生中相邻两人的最近距离越大越好。有 C(2≤C≤N)名学生,那么,这个最大的最近距离是多少呢?

输入格式
第 1 行:两个用空格隔开的数字 N 和 C。
第 2∼ N+1 行:每行一个整数,表示每个隔间的坐标。
输出格式
输出只有一行,即相邻读者最大的最近距离。

输入输出样例
输入
5 3
1
2
8
4
9
输出
3

"""
找最大的最小问题,用二分查找和贪心算法的结合
解题思路:
1、排序
2、二分:确定最大的最小距离
3、贪心:检测可能性
"""
def check(n,c,mid,ps):count=1begin_p=ps[0]for i in range(1,n):if ps[i]-begin_p>=mid:count+=1begin_p=ps[i]if count==c:return Truereturn Falsedef f(n,c,ps):#距离的最小情况和最大情况left=0right=ps[-1]-ps[0]#所有情况 0,1,2,3,4,5,6,7,8best=0#最优距离#当距离最小情况小于等于最大情况,一直找最优解while left<=right:mid=(left+right)//2  #二分拿中间值if check(n,c,mid,ps):   #检查中间值位置间隔是否放得下要放的人数best=midleft=mid+1  #能放下,在右半区位置范围找else:right=mid-1 #不能放下,作左半区位置范围找return bestn,c=map(int,input().split())
ps=[int(input()) for _ in range(n)]
ps.sort()
rs=f(n,c,ps)
print(rs)

第五题 排队形

题目描述
为了在即将到来的晚会上有更好的演出效果,作为 AAA 合唱队负责人的小A需要将合唱队的人根据他们的身高排出一个队形。假定合唱队一共 n 个人,第 i 个人的身高为 ℎi米(1000≤hi≤2000),并已知任何两个人的身高都不同。假定最终排出的队形是 A 个人站成一排,为了简化问题,小 A 想出了如下排队的方式:他让所有的人先按任意顺序站成一个初始队形,然后从左到右按以下原则依次将每个人插入最终棑排出的队形中:

  1. 第一个人直接插入空的当前队形中。
  2. 对从第二个人开始的每个人,如果他比前面那个人高(h 较大),那么将他插入当前队形的最右边。如果他比前面那个人矮(h 较小),那么将他插入当前队形的最左边。

当 n 个人全部插入当前队形后便获得最终排出的队形。
例如,有6个人站成一个初始队形,身高依次为 1850,1900,1700,1650,1800,1750,那么小 A 会按以下步骤获得最终排出的队形:

  • 1850。
  • 1850,1900,因为 1900>1850。
  • 1700,1850,1900,因为 1700<1900。
  • 1650,1700,1850,1900 因为 1650<1700。
  • 1650,1700,1850,1900,1800,因为 1800>1650。
  • 1750,1650,1700,1850,1900,1800,因为 1750<1800。

因此,最终排出的队形是 1750,1650,1700,1850,1900,1800。
小 A 心中有一个理想队形,他想知道多少种初始队形可以获得理想的队形。
请求出答案对 19650827 取模的值。

输入描述
第一行一个整数 n
第二行 n 个整数,表示小 A 心中的理想队形。
输出描述
输出一行一个整数,表示答案 mod19650827 的值。 输入输出样例:

输入:
4
1701 1702 1703 1704
输出:
8

说明/提示
对于 30% 的数据,n≤100。
对于 100% 的数据,n≤1000,1000≤hi≤2000。

"""
考察区间动态规划,给定的区间,要么加在左边,要么加在右边,不断增加。
解题步骤:
1、定义问题状态  f[i][j][0]表示从左边进  f[i][j][1]表示从右边进  
2、找到问题的转移方程,确定初始状态和终止状态
3、通过程序还原模拟过程
"""
MOD=19650827
n=int(input())
nums=list(map(int,input().split()))
f=[[[0,0] for _ in range(n)] for _ in range(n)]#初始化基本状态
for i in range(0,n):f[i][i][0]=1#动规和转移方程
for length in range(1,n):for i in range(0,n-length):  #i起点j=i+length    #j终点#从左边进入if nums[i]<nums[i+1]:f[i][j][0]+=f[i+1][j][0]if nums[i]<nums[j]:f[i][j][0]+=f[i+1][j][1]#从右边进入if nums[j]>nums[i]:f[i][j][1]+=f[i][j-1][0]if nums[j]>nums[j-1]:f[i][j][1]+=f[i][j-1][1]f[i][j][0]%=MODf[i][j][1]%=MODrs=(f[0][n-1][0]+f[0][n-1][1])%MOD
print(rs)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/15868.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

OBOO鸥柏“触摸屏广告一体机交互”亮相2024中国珠海航展

2024年11月12日&#xff0c;第十五届中国国际航空航天博览会&#xff08;简称中国航展或珠海航展&#xff09;在珠海拉开帷幕。展会现场&#xff0c;既有OBOO鸥柏一大批高精尖液晶显示产品集体亮相&#xff0c;也有航天相关科技领域及飞行表演队炫技蓝天等。在中国航展的各个科…

【智能分子动力学】深度学习驱动分子动力学方法概述

深度学习驱动分子动力学&#xff08;Deep Learning-driven Molecular Dynamics&#xff0c;简称DLDMD&#xff09;方法是将深度学习技术应用于分子动力学模拟中的一种创新方法。这种方法通过深度学习模型来提升传统分子动力学模拟的效率和精度&#xff0c;尤其是在复杂系统的建…

(69)基于Hilbert(希尔伯特)变换的调相信号解调的MATLAB仿真

文章目录 前言一、希尔伯特变换二、相位调制1.基本原理2.调制特点3.应用 三、使用希尔伯特变换进行相位解调的原理1. 解调原理2.算法优点 四、MATLAB仿真1. 仿真代码2. 仿真结果 总结 前言 本文首先介绍了相位调制技术&#xff0c;然后说明了使用希尔伯特变换进行调相信号解调…

ISUP协议视频平台EasyCVR视频设备轨迹回放平台智慧农业视频远程监控管理方案

在当今快速发展的农业领域&#xff0c;智慧农业已成为推动农业现代化、助力乡村全面振兴的新手段和新动能。随着信息技术的持续进步和城市化进程的加快&#xff0c;智慧农业对于监控安全和智能管理的需求日益增长。 视频设备轨迹回放平台EasyCVR作为智慧农业视频远程监控管理方…

Python——NumPy库的简单用法,超级详细教程使用

一、什么是NumPy库 NumPy&#xff1a;它是python的一个科学计算库函数&#xff0c;它是由c语言编写的 它应用于数据处理、机器学习、图像处理、文件操作等等 二、array函数 这里导入库numpy&#xff0c;命名为np&#xff0c;后面的np都是代表着是numpy函数 array函数表示创建…

【postman】怎么通过curl看请求报什么错

获取现成的curl方式&#xff1a; 1&#xff0c;拿别人给的curl 2&#xff0c;手机app界面通过charles抓包&#xff0c;点击接口复制curl 3&#xff0c;浏览器界面-开发者工具-选中接口复制curl 拿到curl之后打开postman&#xff0c;点击import&#xff0c;粘贴curl点击send&am…

高翔【自动驾驶与机器人中的SLAM技术】学习笔记(十三)图优化SLAM的本质

一、直白解释slam与图优化的结合 我从b站上学习理解的这个概念。 视频的大概位置是1个小时以后&#xff0c;在第75min到80min之间。图优化SLAM是怎么一回事。 slam本身是有运动方程的&#xff0c;也就是运动状态递推方程&#xff0c;也就是预测过程。通过t1时刻&#xff0c…

哔哩喵 2.3.11 | 非常好用的第三方B站客户端

哔哩喵是一款非常好用的第三方B站客户端&#xff0c;它允许用户查看各个分区在每个时间段的热门视频列表&#xff0c;支持关键字和UP主屏蔽功能&#xff0c;并能通过添加代理服务器来观看受地区限制的番剧。最新版本2.3.11更新了多项功能&#xff0c;包括个人中心头像及动态大图…

算法定制LiteAIServer摄像机实时接入分析平台玩手机打电话检测算法:智能监控的新篇章

在现代社会&#xff0c;随着智能手机的普及&#xff0c;无论是在工作场所还是公共场所&#xff0c;玩手机或打电话的行为日益普遍。然而&#xff0c;在某些特定环境下&#xff0c;如工厂生产线、仓库、学校课堂等&#xff0c;这些行为可能会影响到工作效率、安全或教学秩序。为…

11个c语言编程练习题

0. 钞票和硬币 money.c 读取一个带有两个小数位的浮点数&#xff0c;代表货币价值。将该值分解为多种钞票和硬币的和&#xff0c;要求使用的钞票和硬币的总数量尽可能少。 货币面值有100&#xff0c;50&#xff0c;20&#xff0c;10&#xff0c;5&#xff0c;1&#xff0c;0.…

【go从零单排】Signals、Exit

&#x1f308;Don’t worry , just coding! 内耗与overthinking只会削弱你的精力&#xff0c;虚度你的光阴&#xff0c;每天迈出一小步&#xff0c;回头时发现已经走了很远。 &#x1f4d7;概念 在 Go 语言中&#xff0c;信号&#xff08;signals&#xff09;是操作系统用来通…

PyAEDT:Ansys Electronics Desktop API 简介

在本文中&#xff0c;我将向您介绍 PyAEDT&#xff0c;这是一个 Python 库&#xff0c;旨在增强您对 Ansys Electronics Desktop 或 AEDT 的体验。PyAEDT 通过直接与 AEDT API 交互来简化脚本编写&#xff0c;从而允许在 Ansys 的电磁、热和机械求解器套件之间无缝集成。通过利…

教你制作更方便快捷的电子产品目录!

​在现代工作环境中&#xff0c;电子产品目录进入目录内容的分类的制作。按照电子产品的是至关类型进行重要的分类&#xff0c;环节如&#xff1a;一个清晰、详尽手机、便于、电脑查找的电子产品目录&#xff0c;平板不仅能提高工作效率&#xff0c;还能给客户留下良好的印象。…

硬件工程师之电子元器件—二极管(5)之肖特基二极管

写在前面 本系列文章主要讲解二极管的相关知识&#xff0c;希望能帮助更多的同学认识和了解二极管。 若有相关问题&#xff0c;欢迎评论沟通&#xff0c;共同进步。(*^▽^*) 二极管 9. 肖特基二极管(SBD) 肖特基势垒二极管&#xff08;SBD&#xff09;作为一种二极管&#…

实习冲刺第二十一天

14.最长公共前缀 编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀&#xff0c;返回空字符串 ""。 示例 1&#xff1a; 输入&#xff1a;strs ["flower","flow","flight"] 输出&#xff1a;"fl"示例…

游戏引擎学习第11天

视频参考:https://www.bilibili.com/video/BV1QLmDYQE3n 平台层的编写 应该是平台可移植什么的吧 逐项补充说明&#xff1a; 存档位置 在游戏或应用程序中&#xff0c;需要保存用户的进度、设置和数据&#xff0c;存档位置是指存放这些数据的文件夹路径。通常&#xff0c;平台…

炼码LintCode--数据库题库(级别:入门;数量:144道)--刷题笔记_01

目录 炼码LintCode数据库入门级别的笔记未完待续~~~ 炼码LintCode 数据库 入门级别的笔记 笔记如下&#xff0c;把所有涉及到的入门级别的知识点简单总结了一下。 以及一点点举一反三的写法。 增 INSERT INTO 表名 (列1, 列2, ...) VALUES (值1, 值2, ...);批量增 INSERT INT…

ab (Apache Bench)的使用

Apache Bench&#xff08;ab&#xff09;是一个用于基准测试HTTP Web服务器的命令行工具&#xff0c;广泛用于评估和优化Web服务器的性能。以下是关于Apache Bench的详细介绍&#xff0c;包括其功能、使用方法、常用参数和输出结果解析。 功能 性能测试&#xff1a;通过模拟多…

Cellebrite VS IOS18Rebooting

Cellebrite VS IOS18Rebooting我们想分享一些有关 iOS 18 重启“功能”的信息。在过去一周左右的时间里&#xff0c;人们对 iOS 18 中一项新的未记录功能产生了极大关注&#xff0c;该功能会导致设备在一段时间不活动后重新启动。 这意味着&#xff0c;如果设备在一定时间不活…

YZ系列工具之YZ10:VBA_梦幻图像

我给VBA下的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的工作效率&#xff0c;而且可以提高数据的准确度。我的教程一共九套一部VBA手册&#xff0c;教程分为初级、中级、高级三大部分。是对VBA的系统讲解&#xff0c;从简单的…