蓝桥杯python模拟题解题笔记
计算机存储
计算机基础知识,
数据传输速率:用KBps MBps 或KB、MB 、GB等来表示
1GB=1024MB
1MB=1024KB
1KB=1024Byte
1Byte=8bit (一字节占八位)
网络速率则是1:1000(存储厂商就用这个忽悠人)
print(12.5*1024*1024)#13107200
有向图
两个结点成一条线,看大佬说有向图一条线一来一去算两个向量算两条边(但题目中不允许有重边是什么意思?),三角形算6条,四边形算12条,五边形算20条,可以发现规律有两种,一种是n个结点的边=n-1个结点的边加上2*结点数,一种是n个结点的边=n*n-1
#print(2019*2018)
m=[0]*2018
m[0]=2
for i in range(1,2018):
m[i]=m[i-1]+2*(i+1)
print(m[2017])#4074342,注意结点数从2开始所以i应该为2017
字母排列
知识:python的itertools库有很方便的combinations函数和permutations函数,
combinations主要用于组合,permutations主要用于排列,set函数则是生成不重复列表
import itertools as it
s=it.permutations('LANQIAO')
print(len(set(s)))#2520
括号序列
手动排列不比写代码省事多了?(doge)细心点就行
(((()))) ((()())) (()()()) ()()()() ((())())
(()(())) ((()))() ()((())) (())(()) (())()()
()(())() ()()(()) (()())() ()(()())#14
反倍数
n=int(input())
a,b,c=map(int,input().split())
s=0
for i in range(n):
if(i%a!=0 and i%b!=0 and i%c!=0):
s+=1
print(s)
凯撒密码
只需要考虑小写单词就很简单了,转ASCII码算就行
word=input()
word=list(word)
l=len(word)
for i in range(l):
if(ord(word[i])+3<123):
word[i]=chr(ord(word[i])+3)
else:
word[i]=chr(ord(word[i]+3-122+96))
print(''.join(word))
螺旋矩阵
大概是这么个玩意儿
感谢同学@厂子哥提供的代码,用的递归方法
n,m=map(int,input().split())
r,c=map(int,input().split())
mat=[[0]*m for y in range(n)]
def Mat(n,m,i,j,k):
if(n*m<=0):
return
for y in range(m-1):
mat[i][j]=k
j+=1
k+=1
for x in range(n-1):
mat[i][j]=k
i+=1
k+=1
for y in range(m-1):
mat[i][j]=k
j-=1
k+=1
for x in range(n-1):
mat[i][j]=k
k+=1
i-=1
Mat(n-2,m-2,i+1,j+1,k)
i,j,k=0,0,1
Mat(n,m,i,j,k)
print(mat)
print(mat[r-1][c-1])
我自己代码好像只能做到n>=2,m<=100,题目中的4x5没问题,但是5x5以上就不行了,先放这之后才看看吧(有没有大佬指正一下),这题做的脑壳疼,人都螺旋了
n,m=map(int,input().split())
s=n*m
r,c=map(int,input().split())
mat=[[0]*m for y in range(n)]
right=0
down=0
k=1
col=m
row=n
while(k<n*m):
while(right<col-1):
if(mat[down][right]==0):
mat[down][right]=k
right+=1
k+=1
else:
break
while(down<row-1):
if(mat[down][right]==0):
mat[down][right]=k
down+=1
k+=1
else:
break
col=right
row=down
for j in range(col):
if(mat[down][right]==0):
mat[down][right]=k
right-=1
k+=1
else:
break
for i in range(row-1):
if(mat[down][right]==0):
mat[down][right]=k
down-=1
k+=1
else:
break
print(mat)
print(mat[r-1][c-1])
——未完待续——