关键字

A+B问题,数列排序,十六进制转八进制,十六进制转十进制,十进制转十六进制,特殊回文数,回文数,特殊的数字,杨辉三角形,查找整数,数列特征,字母图形,01字串,闰年判断,斐波那契数列,圆的面积,序列求和。

前言

前两天刷题刷到崩溃,天天WA,处处WA,真的很搞心态。就在我情绪低落之时,发现蓝桥杯基础练习还没做,于是我一口气把它给做完了,两个字,舒服。不过呢,我发现其中还是有一两条题目要求的不够规范,有歧义,比如‘字母图形’这道题,希望大家多多注意。

虽然这些都是基础题,但也是能通过多种方法实现的,比如杨辉三角我是通过组合数求解,而不是通过上面两数之和得出下一个数的; 斐波那契数列中我使用了递推来求解,而不是递归,我用三位数就能求出五位到六位的回文数,而不是在五位到六位数之间遍历匹配回文串等等 ,另外,我还会提到在除法计算中的精度问题。我们一起去看看吧!


A+B问题


这道题就不用说啥了,注意输入时是使用map函数接收两个整数。期间需要使用split()函数分割。

A,B = map(int,input().split())
print(A+B)

数列排序


排序的方法有很多,对于python来说,它有个自带的排序函数sort,可以直接对列表进行排序然后输出。

length = int(input())
nums = list(map(int,input().split()))
nums.sort()
for i in nums:print(i,end=" ")

我总结了两套排序算法的模板,分别是冒泡排序和快速排序,和一份二分查找的模板,感兴趣的朋友可以了解一下,点此进入。


十六进制转八进制

对于进制转换,python也有相应的内置函数供我们使用。题目要求是十六进制转八进制,那么我们需要先将十六进制数转换成十进制,然后再将十进制数转换成八进制。

十六进制转换为十进制是使用int函数——int(“十六进制数”, 16),其中第一个参数是十六进制数的字符串,第二个参数是声明这是一个十六进制数。同理,八进制转十进制,二进制转十进制,都是以同样的方式进行处理。

转换成十进制后使用oct函数,将十进制数转换成八进制数。

注意,通过oct函数转换成八进制数后会有前缀“0o”表示这是一个八进制数,但题目规定不能有前缀,因此需要使用切片将其去除。

step = int(input())
nums = []
for i in range(step):nums.append(oct(int(f"{input()}",16)))
for i in nums:print(i[2:])

十六进制转十进制

理解完上一题后这一题就不难了,同样使用python内置函数求解。

h = input()
print(int(h,16))

十进制转十六进制


python内置函数hex可以将十进制数转换成十六进制数。同样的使用hex函数转换后会有个前缀,“0x”表示这是一个十六进制的数,但题目要求不能有前缀,所以我们需要用切片将其去除。另外,题目要求字母要大写,而经过hex函数转换过来的是小写字母,因此,我们需要使用upper函数将字母转换为大写。

print(f"{hex(int(input()))[2:].upper()}")

特殊回文数


回文数相当于左右对称,也就是说右边出现过的数字,左边都出现过。那么我们求一半的数字就能得出整个回文数了。

我们研究一下回文数可以发现,对于六位数的回文数而言,每个数都出现过两遍,右边的数字是左边数字倒序后的情况。比如123321,左边数字就是123 ,倒序之后就是321,那么把他们拼起来就是123321了。**对于五位数而言,除中间数字出现过一遍外,其他数字都出现过两遍。**而且右边的数字是左边数字除去最后一个数的倒序。比如12321,左边数字同样是123,右边数字是21 ,21 相当于123除去最后一个数字后变成12 然后倒序形成的21。

那么我们遍历所有三位数即可。获取三位数上的每一个数字,比较他们的和是否与正整数n相等,如果相等则输出。

需要注意的是,题目要求按顺序输出,而以这种思路输出的话并不是有序的,因为有五位数和六位数。所以我们要先将回文数存储到数组中,然后排个序,最后再输出。

su = int(input())
result = []for i in range(100,1000):g = i % 10s = i // 10 % 10b = i // 100suit1 = 2 * (s+b) + g  # 5位数,除中间那个数外其他数出现过两遍suit2 = 2 * (g+s+b) # 6位数,每个数都出现过两遍if suit1 == su:i = str(i)num = int(i+i[:-1][::-1]) # i[:-1][::-1]表示得到除最后一个数外的倒序排列result.append(num)# 当su = 2 时,两种可能均可出现,所以这里不能用elifif suit2 == su:i = str(i)num = int(i+i[::-1])result.append(num)result.sort()
for i in result:print(i)

特殊的数字


依据题意, 我们获取三位数中的每一位数上的数字,然后对他们求和比较看是否相等,如果相等则输出。

for i in range(100,1000):g = i % 10s = i // 10 % 10b = i //100if i == g ** 3 + s ** 3 + b ** 3:print(i)

杨辉三角形


看到杨辉三角形我们很容易想到一个数等于它肩膀两数之和,通过这一性质可以得出每一行三角形元素的值。但是,这一次我没有用这个方法。

我们知道杨辉三角左右两边对称,因此我们只要求出左半部分就能得到一整行的元素了,杨辉三角还跟组合数有关,其里面的每一个元素都能用组合数表示。第N行的第M列可以表示成C(N-1,M-1),如6在第5行的第3列,它对应的组合数就是C(5-1,3-1),即C(4,2)。

因此,我们需要定义一个求组合数的函数。C(5,2) 可以表示成 (5 x 4) / (2 x 1) 也可以表示成(5/2)x (4/1)。那么我们的组合数可以这么写:

def C(a,b):if b == 0:return 1if b > a:  # 组合数性质(C(a,b) = C(a,a-b))b = a - bresult = 1for i in range(b): # result *= a / b # 注意注意要用格式化函数,避免数据丢失a -= 1b -= 1return int(round(result,0))

需要特别注意的是: 涉及到除法运算时,有可能会出现小数的情况,像上面那种是特别容易出现的,那么这时候就要考虑会不会出现数据丢失了,当然,以后你都不用考虑,直接加上格式化函数,然后再转换成整型。先说说round函数的作用:保留若干位小数,round函数的第二个参数是多少就是保留多少位小数。与format函数不同的是,无论你写了保留多少位小数都会舍弃掉小数点后面的0。因为在除法中,有些数是除不尽的,这样就会造成数据丢失。举个例子,5 / 3 x 3, 5除以3后再乘3会等于5吗?,显然不等,因为电脑没有分数表示,5除以3后会得到一个数不尽的小数,既然是数不尽,而计算机又不能完全表示5/3这个数,当然会造成数据丢失了,因此 5 / 3 x 3 会很接近5 但不等于5。这时候round函数的作用来了,通过四舍五入就能够变成5.0,最后将其转换成整数,就是我们需要的结果了。其实round函数不是四舍五入,而是四舍六入,具体可以了解我的这篇文章。

既然知道了杨辉三角的两个性质,对称性与组合数,以及组合数的求解方法,那么我们就能来求杨辉三角了。


```def C(a,b):if b == 0:return 1if b > a:b = a - bresult = 1for i in range(b):result *= a / ba -= 1b -= 1return int(round(result,0))step = 1  # 表示初始所在行数line = int(input())  # 表示所要达到的目标行数
print(1)while step < line:nums = []for i in range(step//2+1):  # 根据杨辉三角的对称性,我们只要求一半的数就好了nums.append(C(step,i))if step % 2 == 0:  # 偶数行时,中间数就只能出现一次nums += nums[::-1][1:]else:nums += nums[::-1]  # 奇数行时,中间数能够出现两次for i in nums:print(i,end=" ")print()step += 1

查找整数


在这题中可以使用python的find函数求解,如果找到了元素就返回其下标,否则返回-1。使用find函数的话判断如果找到了,那么下标+1即可,否则就是没找到直接返回-1.

也能够直接使用while遍历, 如果找到了标记为已找到,然后返回下标+1,否则返回-1.

我这里提供第二种解法。

length = int(input())
nums = list(map(int,input().split()))
target = int(input())i = 0
find = False
while i < length :if nums[i] == target:i += 1find = Trueprint(i)breaki += 1
if not find :print(-1)

数列特征


这题使用python的三个函数 max,min,sum一步到位。

length = int(input())nums = list(map(int,input().split()))print(max(nums))print(min(nums))print(sum(nums))

字母图形



这道题出的不好,样例没有给全,我怎么知道你要啥呢?为什么这么说?因为我不知道是要让第一行的字母循环出现,还是让26个字母从左往右依次出现,就以上面的样例为例,第7行是GFEDCBA,这是必然的,那第8行是啥?是AGFEDCB 还是 HGFEDCB ? 我们不得而知,显然两种都符合它的规律,我想应该很多人都以为是第一种情况,包括我,可真正的情况是第二种。

既然已经知道了字母的出现方式,我们就能够制定相应的思路了。我们可以把一行图形分成两部分,左边是由A-Z的倒序排列组成,右边是第一行生成的元素,每生成新的一行,就挤掉右边的一个元素,相应的左边就添加一个元素。当完全挤掉右边元素后,接着左边的尾部元素就要把头部元素给挤走。

N, M = map(int,input().split())# 生成26个字母,方便操作
words = [chr(i) for i in range(65,65+26)]length = 1for i in range(N):# 当右边元素还存在时,序列由两部分组成,分别是倒序元素跟剩下元素if length < M:  partial_words = words[0:length][::-1] + words[1:M-i]# 如果右边元素不存在时,序列仅由倒序元素组成,此时length > Melse:partial_words = words[length-M:length][::-1]length += 1print(''.join(partial_words))

如果看不懂没关系,手写几遍模拟一下过程就懂了。


01字串


要打印二进制字串,我们首先要想到十进制转二进制的函数bin,使用bin函数转换生成的二进制数会有前缀“0b”,表示这是一个二进制数,使用时要用切片将其去除。知道了如何转换成二进制数,剩下的就好办了,根据题目要求输出32行字串,很显然是0-31的二进制数,我们直接使用bin函数即可,前面的数可能不够5位,差多少个0就补多少个0补到长度为5。

for i in range(32):i = bin(i)[2:]# 补0while len(i) < 5:i = "0"+iprint(i)

闰年判断


根据题意我们可以直接写出对应的代码。

year = int(input())if (year % 4 == 0 and year % 100 !=0) or (year % 400 == 0):print("yes")
else:print("no")

斐波那契数列


这道题的容易想到的是递归解法,不断递归获取N-1项与N-2项,直到N=2或N=1时将结果返回。

另一种效率更高的做法是递推。我们可以通过第一项(a)和第二项(b)求出第三项(c),然后第一项走到第二项,第二项走到第三项,这两项再相加得出第四项…以此类推。因为只要10007的余数,那么我们每次都对结果取余即可,结合代码分析一下。

n = int(input())a = 1
b = 1
c = 1
for i in range(3,n+1):c = (a+b) % 10007a = bb = cprint(c)

圆的面积


要求圆的面积,我们要用到 π ,当然,python也有对应的函数用来表示 π 。
因为要保留7位小数,所以要用到format格式化函数。

import math
r = int(input())
print(format(math.pi*r**2,".7f"))

序列求和


这就是一个等差数列,我们可以通过前n项和公式求解。


n = int(input())res =  n * (1+n) / 2print(int(round(res,0)))

前面我们讲过在除法计算中,因为样例的类型是整型,为避免出现数据丢失,要使用round函数。

蓝桥杯 基础练习全解 答案+解析 共17题 python相关推荐

  1. 十二届蓝桥杯省赛B组C++解析(填空题部分)

    十二届蓝桥杯省赛B组C++解析(填空题部分) 目录 十二届蓝桥杯省赛B组C++解析(填空题部分) A:空间 B:卡片 C:直线 D:货物摆放 E:路径 A:空间 该题是一道计算机基础原理题,这里需要了 ...

  2. 蓝桥杯基础练习 - 2n皇后问题解析

    问题描述         给定一个n*n的棋盘,棋盘中有一些位置不能放皇后.现在要向棋盘中放入n个黑皇后和n个白皇后,使任意的两个黑皇后都不在同一行.同一列或同一条对角线上,任意的两个白皇后都不在同一 ...

  3. 蓝桥杯--算法入门级题目及答案解析

    写在最前面: 本文中会出现大量的请查阅.请自学什么的,不是我不讲,本文是面向算法初学者和蓝桥杯的文章,如果真的想看进阶算法的也不会来看这些题目,所以不要介意,我这里就算是抛砖引玉了,大佬勿喷,ACME ...

  4. 蓝桥杯基础练习所有VIP习题解析代码

    阶乘计算 资源限制 时间限制:1.0s 内存限制:512.0MB 问题描述 输入一个正整数n,输出n!的值. 其中n!=123*-*n. 算法描述 n!可能很大,而计算机能表示的整数范围有限,需要使用 ...

  5. 【BIM入门实战】Revit入门基础知识选择题带答案解析(116题)

    1.在Revit同一个界面同时打开多个视图的快捷键是( ). A. WT B. WA C. WC D. WD 答案: A 2.Revit样板文件的后缀名是( ). A. .rvt B. .rte C. ...

  6. 2016年 第7届 蓝桥杯 Java B组 省赛解析及总结

    蓝桥杯 Java B组 省赛决赛 真题详解及小结汇总[2013年(第4届)~2021年(第12届)] 第11届 蓝桥杯-第1.2次模拟(软件类)真题-(2020年3月.4月)-官方讲解视频 说明:部分 ...

  7. 蓝桥杯基础视频 笔记

    学习地址:哔哩哔哩网站--蓝桥杯基础视频         博主整理--源码下载--百度网盘链接 蓝桥杯 Java B组 省赛真题详解及小结汇总[2013年(第4届)~2020年(第11届)] 注意:部 ...

  8. 历届蓝桥杯青少年Scratch编程选拔赛 STEMA评测比赛真题解析【持续更新 已更新至49题】

    历届蓝桥杯scratch选拔赛真题 第十届.十一届.十二届.十三届蓝桥杯选拔赛STEMA比赛真题解析 选拔赛真题49-购物程序 [蓝桥杯选拔赛真题48]Scratch购物程序 少儿编程scratch蓝 ...

  9. 2015年 第6届 蓝桥杯 Java B组 省赛解析及总结

    蓝桥杯 Java B组 省赛决赛 真题详解及小结汇总[2013年(第4届)~2021年(第12届)] 第11届 蓝桥杯-第1.2次模拟(软件类)真题-(2020年3月.4月)-官方讲解视频 说明:部分 ...

最新文章

  1. 使用Git将我的最后一个X提交一起压缩
  2. .net Core+Dapper MySQL增删改查
  3. android端与服务端差别,Android客户端和服务器端编程
  4. Mac下cocos2dx-3.2+Xcode环境配置和项目创建
  5. 【iVX 初级工程师培训教程 10篇文拿证】03 事件及猜数字小游戏
  6. setTimeout和setInterval的区别
  7. [bbk5307]第76集 第9章 -数据库性能维护 03
  8. netbean下搭建mariadb数据库
  9. IBM Lotus Domino Designer 下载安装记录
  10. IDL 读取葵花8(Himawari-8)HSD数据
  11. 怎么看自己电脑的IP地址
  12. ES分片UNASSIGNED解决方案(ALLOCATION_FAILED,REPLICA_ADDED,NODE_LEFT,REINITIALIZED,CLUSTER_RECOVERED等等)
  13. 近月计算机图书市场盘点:阳春三月好风光
  14. Linux Shell 编程语法
  15. RISC-V Debug Introduction
  16. 我的世界Bukkit服务器插件开发教程(十一)粒子、药水效果与音效
  17. mall订单模块的业务学习
  18. 5言律诗-望月(原创新作)
  19. 某应用虚拟化系统远程代码执行
  20. li、ul如何去除小黑点样式

热门文章

  1. A城市巡游车与网约车运营特征对比分析—赛题介绍与准备工作
  2. 遵守法律、提高安全意识:春节赴新西兰这些需注意
  3. python+vue+elementui生鲜超市商城系统django多商家
  4. 小型web服务器的编写
  5. pillow模块Image.crop()函数切割图片方法,参数说明
  6. vue项目中loadsh库常用方法
  7. 中央电大计算机专业指南试题,《计算机专业指南》期末试题.doc
  8. 华为数通技术及ENSP模拟器学习
  9. 主要内容: 本文提出了一种基于(ppo)的微电网最优调度方法。 该方法采用强化学习(RL)来学习调度策略,并积累相应的调度知识。 同时,引入ppo模型,将微电网调度策略动作从离散动作空间扩展到连续动作
  10. 模块一:shell 脚本基础