首页 > 编程语言 >python蓝桥题库2141-山

python蓝桥题库2141-山

时间:2024-04-06 19:59:49浏览次数:23  
标签:折半 123 判断 python 那么 蓝桥 循环 2141 字符串

见题目

我最近买了他们官方的程序设计竞赛的书,一本紫色的,在引子部分这部分出现了这道题,最开始看代码的时候没看懂,我现在来逐层分析,你需要有一定基础来看这篇文章,还要就是我的见解

偶数情况

第一行先设置了个ans的计数变量

接下来range循环20-20223(不对啊?这和题目要求的循环数不一样不是)

官方解释是这样的,看题目不难发现,会有偶数这种情况,那么右边等于左边的倒过来(对称),那么我们把循环也给折半只要判断左边的数进而可以判断右边的数

(没错,所以他就直接折半了,这里其实我也是很懵,官方说用了构造法)

然后回到程序中

第6行先将i变成字符串,设置下标flag=1,然后再循环;

拿第一个数20为例子,那么第7行代码的循环的次数为1次(此时的20是个字符串,长度为2,遍历只遍历0,1,因为第7行字符串长度-1,所以只循环1次,不然后面判断会超出索引范围),那么接下来判断字符串s中的第一位和第二位,因为2>0,所以在第一次循环的时候就直接结束了,下标为1;

现在拿123举例子,按照123字符串的长度,一共循环3-1=2次,第一次判断1与2,2大;第二次判断2与3那么3大,那么相对于的右边部分也一样,此时下标为1不变。

个人推断:这里的123是个并不是真正意义上的123,可能是没折半之前的123321,那么123321呢?这个循环是折半的,那么可以推断出123321是用来判断更大的数

奇数情况

这里的与偶数情况的差别是循环次数和第22行的判断

当为奇数时,那么中间值一定是最大的,那么例如11211只要判断2左边的数大小进而可以判断右边的数,因为他们的范围是[11111,999999999],为什么没有百位?题目从2020开始

拿11代入程序中,因为1=1,不存在谁大谁小,所以程序会跳到判断环节,为什么会有个10-int(s[i+1])?

此时中间的最大值为2,左边部分长度为s=11,末尾为1,那么中间的数可以为2~9(中间值最大),那么可以为11311、11411...那么就有10(0~9一共10个数)-2(除去前面已经被遍历过的0,1)=8个结果.

最后输出结果为3138

个人结尾

其实这个问题主要围绕着折半来解的,能理解折半就能大致理解奇偶情况,我上面的逻辑如果出问题可以在评论区指出来,我大部分内容借鉴了这本书中的回答来呈现在这篇文章中,旨在帮助做道题时跟我一样遇到困难的学者,希望我的文章对你有用!

标签:折半,123,判断,python,那么,蓝桥,循环,2141,字符串
From: https://blog.csdn.net/2301_77817844/article/details/137434768

相关文章

  • python 在命令行中选择文件路径的交互程序
    直接上代码,懒得多说1importcolorama2colorama.init()3fromcoloramaimportFore,Back,Style4importos5importre67class路径选择器:8def__init__(self):9当前路径=''10选择集=[]11路径深度......
  • 1、你好,Python
    快速介绍Python语法、变量赋值和数字!这门课程涵盖了你在使用Python进行数据科学时所需的关键Python技能。该课程适合有一些先前编码经验的人,希望将Python添加到他们的技能库中。(如果您是第一次编码,建议您查看我们的编程入门课程,该课程专为完全初学者设计,希望开始使用Python。)......
  • Python常用算法--排序算法【附源码】
    应用具体python案例方式展示各种排序的要点,特别是希尔排序、插入排序、选择排序、冒泡排序、堆排序、快速排序、归并排序七个具体的排序算法。一、希尔排序:解释:希尔排序(ShellSort)是一种插入排序的改进版本,也被称为缩小增量排序。希尔排序通过比较相距一定间隔的元素,将大间隔......
  • 让工作自动化起来!无所不能的Python
    让工作自动化起来!无所不能的Python让工作自动化起来!无所不能的Python编辑推荐内容简介作者简介前言为什么要写这本书读者对象如何阅读本书博主默语带您GotoNewWorld.✍个人主页——默语的博客......
  • 国科大Python编程基础--编程基础Chapter02
    ......
  • 编程小白必须知道的 15 个强大的 Python 单行代码
    这里写目录标题三元运算符为多个变量赋值交换变量的值交换列表中的元素替换列表中的元素列表推导式与三元运算结合使用列表推导式从列表创建子列表更改列表元素类型使用列表推导式输出文件列表平展多维列表字典推导式集合推导式将文件读入生成器使用Python-c命令的单......
  • 使用 5 行 Python 代码拆分或合并 PDF 文件
    目录:拆分PDF文件合并PDF文件如果希望从大型PDF文件中提取特定页面或将多个PDF文件合并为一个文件,可以使用一些PDF编辑器来完成,但是你可能会发现拆分或合并功能在很多免费版PDF编辑工具中通常不可用。在本文中,我将分享一个简单的解决方案,用几行Python代......
  • Python 潮流周刊第 45 期(摘要)+ 赠书 5 本《Python语言及其应用(第2版)》
    本周刊由Python猫出品,精心筛选国内外的250+信息源,为你挑选最值得分享的文章、教程、开源项目、软件工具、播客和视频、热门话题等内容。愿景:帮助所有读者精进Python技术,并增长职业和副业的收入。周刊全文:https://pythoncat.top/posts/2024-04-06-weekly特别提醒:本期赠书5......
  • 使用Python插入100万条数据到MySQL数据库并将数据逐步写出到多个Excel
    Python插入100万条数据到MySQL数据库步骤一:导入所需模块和库首先,我们需要导入MySQL连接器模块和Faker模块。MySQL连接器模块用于连接到MySQL数据库,而Faker模块用于生成虚假数据。importmysql.connector#导入MySQL连接器模块fromfakerimportFaker#导入......
  • Python 语法检查、格式化工具 Ruff 的各项配置
    一、配置文件1.1配置文件的位置和优先级Ruff支持pyproject.toml、ruff.toml和.ruff.toml三种文件(同时出现时,右边的优先级高);最近的配置文件生效,父级的将被忽略;可使用extend继承其他配置;命令行指定参数时,会覆盖配置文件中的选项(即命令行优先级更高);可使用target-ver......