python 基础知识点(蓝桥杯python科目个人复习计划24)

news2024/10/2 22:24:18

今日复习内容:基础算法中的模拟

1.模拟题

(1)定义:直接按照题目含义模拟即可,一般不涉及算法。

(2)注意:读懂题:理清楚题目流程;

                     代码和步骤一一对应:变量名,函数名,函数功能;

                     提取重复的部分,写成对应的函数(子模块);

                      按顺序写,分块调试。

2.例题分析

例题1:饮料换购

题目描述:

乐羊羊饮料厂正在举办一次促销优惠活动。乐羊羊c型饮料,凭3个瓶盖可以再换一瓶饮料,并且可以一直循环下去(但是不允许暂借或赊账)。

请你计算一下,如果小明不浪费瓶盖,尽量地参加活动,那么,对于他初始买入的n瓶饮料,最终他一共可以喝到多少瓶饮料?

输入描述:

输入一个整数n,0 <= n <= 1000,表示开始购买的饮料数量。

输出描述:

输出一个整数,表示实际得到的饮料数量。

参考答案:

方法1:

#n表示瓶盖的数量
n = int(input())
ans = n
while True:
    if n >= 3:
        #用三个瓶盖换一瓶饮料,原来的瓶数减一
        n -= 3
        #瓶子数量加一
        ans += 1
        n += 1
    else:
        break
print(ans)

运行结果:

方法2: 

#n表示瓶盖的数量
n = int(input())
ans = n
while n >= 3:
    ans += n // 3
    n = n // 3 + n % 3
print(ans)

运行结果同上。

例题2:图像模糊

题目描述:

小蓝有一张黑白图像,由n*m个像素组成,其中从上到下共n行,每行从左到右共m列,每个像素由一个0到255之间的灰度值表示。

现在,小蓝要对图像进行模糊处理,操作的方法为:

对于每个像素,将以它为中心3*3区域内的所有像素(可能是9个像素或少于9个像素)求和后除以这个范围内的像素个数(取下整) ,得到的值就是模糊后的结果。

请注意每个像素都要用原图中的灰度值计算求和。

输入描述:

输入的第一行包含两个整数n和m;

第二行到n+1行每行包含两个m个整数,表示每个像素的灰度值,相邻整数之间用一个空格隔开,

其中,1 <= n,m <= 100。

输出描述:

输出n行,每行包括m个整数,相邻两个整数之间用一个空格隔开,表示模糊后的图像。

参考答案:

#定义二维列表
n,m = map(int,input().split())
Map = []
#需要读入n行
for i in range(n):
    a = list(map(int,input().split()))
    Map.append(a)
# 构建一个n行m列的二维列表
ans = [[0]*m for i in range(n)]
# print(ans)
for i in range(n):
    for j in range(m):
        tot, cnt = 0, 0  # 分别表示总数和个数
        for delta_x in [-1,0,1]:
            for delta_y in [-1,0,1]:
                x = i + delta_x
                y = j + delta_y
                #这九个位置都可以有,但不一定都存在,所以还要判断是否在规定范围内
                if 0 <= x < n and 0 <= y < m:
                    tot += Map[x][y]    # 这步就是求和
                    cnt += 1
        ans[i][j] = tot // cnt
for a in ans:
    print(" ".join(map(str,a)))

运行结果:

我来说一下思路。

这个题是这样计算的,我用一个例子:

3 4
0 0 0 255
0 0 255 0
0 30 255 255

比如这个数组, 取右上角的255,则它周围仅有三个数字:0,0,255,所以根据题意,这个数字的计算结果应该是(0 + 0 + 255 + 255)// 4 = 127,原理就是这样。

接下来我来解释代码中的几个难点:

(1)

#需要读入n行
for i in range(n):
    a = list(map(int,input().split()))
    Map.append(a)

这部分的结果是:

将输入的矩阵转换为一个列表。

(2) 

遍历3*3区域内的每个元素,用到的是我上一篇文章中写的知识点。
此时的位置是(i,j),那么它旁边的位置就是:
(i-1,j-1),(i-1,j+0),(i-1,j+1)
(i+0,j-1),(i+0,j+0),(i+0,j+1)
(i+1,j-1),(i+1,j+0),(i+1,j+1)

关于这个题的难点,我只写这么多,若还有疑问,欢迎一起讨论。

例题3:螺旋矩阵

题目描述:

对于一个n行m列的矩阵,我们可以使用螺旋的方式给表格依次填上正整数,我们称填好的表格为一个螺旋矩阵。例如,一个4行5列的矩阵如图所示。

1 2 3 4 5

14 15 16 17 6

13 20 19 18 7

12 11 10 9 8

输入描述:

输入格式:

第一行输入两个正整数n和m,分别表示螺旋矩阵的行数和列数;

第二行包含两个整数r和c,表示要求的行号和列号;

其中,2 < = n,m <= 1000,1 <= r <= n , 1 <= c <= m。

输出描述:

输出一个整数,表示螺旋矩阵中第r行c列的值。

参考答案:

n,m = map(int,input().split())
r,c = map(int,input().split())
Map = [[0]* m for i in range(n)]
#模拟行进过程,(x,y) = value
x,y = 0,0
value = 1
Map[x][y] = value
while value < n * m:
    # 不断向右走,且要保证下一个点在所规定的范围内,保证下一个点没有数字
    while y+1 < m and Map[x][y+1] == 0:
        value += 1
        y += 1
        Map[x][y] = value

    #往下走
    while x+1 < n and Map[x+1][y] == 0:
        value += 1
        x += 1
        Map[x][y] = value

    # 往左走
    while y-1 >= 0and Map[x][y-1] == 0:
        value += 1
        y -= 1
        Map[x][y] = value

    # 往上走
    while x-1 >= 0and Map[x-1][y] == 0:
        value += 1
        x -= 1
        Map[x][y] = value
print(Map[r-1][c-1])

运行结果:

 

这个题看着很难,但是知识点我都重复过了,若有疑问,欢迎提出,一起探讨。

OK,今天就写这么多,明天继续! 

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

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

相关文章

爷爷问:IPv6为什么还没有完全替换掉IPv4 ?区别是什么?

首先IPV6之所以提出&#xff0c;很大一部分原因是IPV4的地址不够用了&#xff0c;再出现新设备就没得地址分配&#xff0c;所以才会提出新的IP版本以满足分配需求。在对IPV6进行一个基本了解后来看看两者的区别。 IPV6基本了解 1.层次化的地址结构 地址长度为128bit&#xf…

鸿蒙ArkUI开发-实现增删Tab页签

场景介绍 部分应用在使用过程中需要自定义添加或删除标签的场景&#xff0c;比如在浏览器中的顶部标签栏中需要新打开或关闭网页页签&#xff0c;而这种场景与Tabs组件效果类似&#xff0c;但Tabs组件不提供增加或删除页签的功能&#xff0c;不能自由的增加删除页签&#xff0…

Java编程的利器:Pair和Triple无缝解决多值返回问题,助力编写高效代码

在实际编码中&#xff0c;经常会遇到一个方法需要返回多个值的情况&#xff0c;你编写一个方法&#xff0c;需要同时返回某个操作的结果和一些相关的附加信息。使用传统的方式&#xff0c;你可能需要创建一个包含这些信息的自定义类或者使用集合&#xff08;如 Map&#xff09;…

系统引导程序 Boot Loader——学习笔记

基于嵌入式Linux 的完整系统软件由三个部分组成&#xff1a;系统引导程序、Linux 操作系统内核和文件系统。 系统引导程序 Boot Loader 是系统加电后运行的第一段软件代码&#xff0c;它的作用是加载操作系统或者其他程序到内存中&#xff0c;并将控制权交给它们。 Boot Load…

代码随想录算法训练营第16天 | 104.二叉树的最大深度, 111.二叉树的最小深度 ,222.完全二叉树的节点个数

二叉树理论基础&#xff1a; https://programmercarl.com/%E4%BA%8C%E5%8F%89%E6%A0%91%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%80.html#%E7%AE%97%E6%B3%95%E5%85%AC%E5%BC%80%E8%AF%BE 104.二叉树的最大深度 题目链接&#xff1a;https://leetcode.cn/problems/maximum-depth-…

Mediasoup Demo-v3笔记(三)——Mediasoup库介绍

Mediasoup基本概念 Worker &#xff1a; 每一个worker就是一个进程&#xff08;节点&#xff09;&#xff0c;进程和进程之间可以通信Router&#xff1a;每一个Router就是一个房间的概念Producer&#xff1a;每一个发出声音和视频的流都是一个ProducerConsumer&#xff1a;每一…

Confluence 的文章导入到 YouTrack KB 中

YouTrack 是有一个 KB 的&#xff0c;我们可以吧 Confluence 的文章全部导入到 YouTrack 的 KB 中。 首先&#xff0c;你需要具有管理员权限&#xff0c;然后选择导入。 然后可以在打开的界面中新增一个导入。 在新增导入中输入 Confluence 在随后的界面中输入你 Confluence …

浅谈ICMP协议

ICMP(Internet Control Message Protocol) 网络控制消息协议是网络层的协议&#xff0c;所谓控制&#xff0c;指的是通过下发指令来判断是否当前主机可达目标主机及不可达时的错误报告。通常使用ping命令和traceroute命令来使用。 ping命令:检测到目标主机是否可达、 tracerout…

SQL语句创建一个简单的银行数据库

目录 一、银行业务E-R图 二、数据库模型图 转换关系模型后&#xff1a; 三、创建数据库 3.1 创建银行业务数据库 四、创建表 4.1 创建客户信息表 4.2 创建银行卡信息表 4.3 创建交易信息表 4.4 创建存款类型表 结果如下&#xff1a; ​编辑 五、插入适量数据 5.1…

Linux中LVM实验

LVM实验&#xff1a; 1、分区 -L是大小的意思-n名称的意思 从vg0&#xff08;卷组&#xff09;分出来 2、格式化LV逻辑卷 LVM扩容 如果icdir空间不够了&#xff0c; 扩展空间lvextend -L 5G /dev/vg0/lv1 /dev/vg0/lv1(pp,vg,lv) 刷新文件系统xfs_growfs /lvdir VG扩容 …

选现货白银投资划不划算?

可以肯定的是选择现货白银投资是划算的&#xff0c;但投资者需要有足够的知识和经验&#xff0c;以及对市场的敏锐观察力。只有这样&#xff0c;投资者才能在现货白银投资中获取收益。在投资市场上&#xff0c;白银作为一种特殊的投资品种&#xff0c;一直以来都备受投资者们的…

01:云计算底层技术奥秘|虚拟化管理|公有云概述

云计算底层技术奥秘&#xff5c;虚拟化管理&#xff5c;公有云概述 虚拟化平台安装验证虚拟化支持 Linux虚拟机创建虚拟机磁盘虚拟机配置文件创建虚拟机 公有云简介 虚拟化平台安装 虚拟化&#xff1a;是一种技术 就是将不可拆分的实体资源变成可以自由划分的逻辑资源&#xf…

搭建Vite和Vue环境

​ 第一步&#xff1a;创建一个文件夹&#xff08;此处为新建文件夹&#xff09;&#xff0c;并通过vscode打开 第二步&#xff1a;鼠标右键新建终端&#xff0c;并在终端处输入代码npm create vuelatest ​第三步&#xff1a;输入该项目名称&#xff08;该项目名称并不是第一…

面向对象编程(进阶)(上)

文章目录 一. 关键字&#xff1a;this1.1 this是什么&#xff1f;1.2 什么时候使用this1.2.1 实例方法或构造器中使用当前对象的成员1.2.2 同一个类中构造器互相调用 1.3 练习 二. 面向对象特征二&#xff1a;继承(Inheritance)2.1 继承的概述2.1.1 生活中的继承2.1.2 Java中的…

乖乖,咱不用BeanUtil.copy了,咱试试这款神级工具(超详细)

引言 在现代Java应用程序开发中&#xff0c;处理对象之间的映射是一个常见而且必不可少的任务。随着项目规模的增长&#xff0c;手动编写繁琐的映射代码不仅耗时且容易出错&#xff0c;因此开发者们一直在寻找更高效的解决方案。比如基于Dozer封装的或者Spring自带的BeanUtil.…

C语言指针进阶之一字符指针

目录 1.指针知识回顾 2.字符指针 2.1字符指针的一般使用 2.2字符指针的另外一种使用 1.指针知识回顾 ①.指针就是个变量&#xff0c;用来存放地址&#xff0c;地址唯一标识了一片空间。 内存会划分成一个个的内存单元&#xff0c;每个内存单元都有一个独立的编号&#xff0…

php怎么输入一个变量,http常用的两种请求方式getpost(ctf基础)

php是网页脚本语言&#xff0c;网页一般支持两种提交变量的方式&#xff0c;即get和post get方式传参 直接在网页URL的后面写上【?a1027】&#xff0c;如果有多个参数则用&符号连接&#xff0c; 如【?a10&b27】 post方式传参 需要借助插件&#xff0c;ctfer必备插…

腾讯云服务器一键部署幻兽帕鲁联机服务器详细教程(Linux系统)

腾讯云作为国内领先的云计算服务商&#xff0c;为广大用户提供了稳定、高效的云计算服务。本文将详细介绍如何在腾讯云服务器&#xff08;Linux系统&#xff09;实现一键部署幻兽帕鲁联机服务器&#xff0c;帮助大家快速搭建自己的游戏联机服务器。 第一步&#xff1a;购买服务…

C#winform上位机开发学习笔记13-串口助手显示系统时间功能添加

1.功能描述 在上位机中显示系统的实时时间 2.代码部分 步骤1&#xff1a;添加文本框控件并设置参数 #此处注意将BackColor颜色修改为非Control&#xff0c;即可正常显示ForeColor颜色&#xff0c;否则该颜色不变&#xff0c;原因暂且不明。 步骤2&#xff1a;添加timer控件…

Docker深入解析:从基础到实践

Docker基础知识 Docker是什么&#xff1a;定义和核心概念解释 Docker是一个开源项目&#xff0c;它诞生于2013年&#xff0c;旨在自动化应用程序的部署过程&#xff0c; 让应用程序能够在轻量级的、可移植的、自给自足的容器中运行。这些容器可以在几乎任何机器上运行&#xf…