蓝桥杯笔记
数列排序
- split()方法对字符串分割时默认为空格,使用split(" ")会导致错误
- python无数组
- print使用end参数控制输出在一行,注意最后一个字符输出时后面无空格单独处理
print('',end=str(item))
- python无数组,用列表结构代替
十进制,八进制,十六进制之间的转换
hex(),oct(),bin()
分别为十六进制,八进制,二进制的转换,该数值转换建立在原数值是整型的基础上int(,16) int(,8) int(,2)
可将字符型变为对应进制整形format(,'x')
去掉十六进制的前缀,format(,'X')
去掉前缀的同时将小写变大写,‘o’,'b’分别对应八进制和二进制
快速识别回文数方法
a = str(num)
b = a[::-1]
if a==b:
for i in a:
sum +=int(i)
解决杨辉三角方法细节
- 注意最后一个数字后面没有空格
- 以行为单位考虑问题
字母图形的实现
abs(row-list)
2n皇后问题
a[i],i
做为行,a[i]
的值为列处理- 修改局部变量需要在局部变量前加上global变为全局变量
数字读取问题
- 将数字作为字符串处理,每四个一组进行分组读取
- 对于一个零情况,每一位需判断前一位是否为0
- 十位需要判断为shi或者yi shi
矩形面积交问题
思路:通过画图分析观察
分为四种情况
- 两个矩形相交有两种情况
- 一个矩形包含另外一个矩形
- 两个矩形不相交
通过观察发现可以通过矩形的对顶点坐标推出相交矩形的对顶点坐标
x1,y1,a1,b1 = map(float,input().split())
x2,y2,a2,b2 = map(float,input().split())
x = max(min(x1,a1),min(x2,a2))
y = max(min(y1,b1),min(y2,b2))
b = min(max(y1,b1),max(y2,b2))
a = min(max(x1,a1),max(x2,a2))
if(a>x and b>y):
area = round((a-x)*(b-y),3)
else:
area = 0
print('%.2f' %area)
矩阵相乘问题
np.dot
真正意义上的矩阵相乘
np.identity()
创建单位矩阵
最大最小公倍数问题
问题分析:题目要求在1-N的数字中找到3个数子使它的最小公倍数最大,当二个数互质时其最小公倍数最大,而相邻的自然数互质(奇数-偶数 or 偶数-奇数),很自然的可以想到n*(n-1)*(n-2)
会是最大的,在这个地方需要进一步思考,如果n为奇数时(奇数-偶数-奇数)没有问题,当n为偶数时(偶数-奇数-偶数)会有最大公因数2,我们可以选择n*(n-1)*(n-3)
,这时又会出现一个问题n可能会与(n-3)存在3公因数,很显然我们需要(n-1)*(n-2)*(n-3)
,因为(n-1)*(n-2)*(n-3)
小于n*(n-1)*(n-3)
,所以我们提前判断n是否为3的倍数.
n = int(input())
list1 = [x for x in range(1,n+1)]
#如果n为奇数,那么最后三个数的组合是奇偶奇
if(n%2==1):
result = list1[n-1]*list1[n-2]*list1[n-3]
else:
if(n%3!=0):
result = list1[n-1]*list1[n-2]*list1[n-4]
else:
result = list1[n-2]*list1[n-3]*list1[n-4]
print(result)
该为题为简单的贪心思想,可以推广到选取4,5,6等数字,例如如果选取4个数,当n为奇数时后四个数为n*(n-1)*(n-2)*(n-4)
(奇数-偶数-奇数-奇数),当n为偶数时后四个数时,如果n不为4的倍数则n*(n-1)*(n-3)*(n-4)
,否则为(n-1)*(n-2)*(n-4)*(n-5)
可以发现在选取的数中不能有两个偶数,奇数不能有公因数就可以很好的解决这类问题。
2021-3-19