1蓝桥杯练习系统 python
- 目录
- 一、基础练习
- BASIC-01 A+B问题
- BASIC-02 序列求和
- BASIC-03 圆的面积
- BASIC-04 斐波那契数列
- BASIC-1 闰年判断
- BASIC-2 01字串
- BASIC-3 字母图形
- BASIC-4 数列特征
- BASIC-5 查找整数
- BASIC-6 杨辉三角形
- BASIC-7 特殊的数字1
- BASIC-7 特殊的数字2
- BASIC-8 回文数1
- BASIC-9 特殊回文数
- BASIC-10 十进制转十六进制
- BASIC-11 十六进制转八进制
- BASIC-12 十六进制转十进制
- BASIC-13 数列排序
- BASIC-14 时间转换(取余 数字字符混合输出)
- BASIC-15字符串对比(字符串 大小写)
- BASIC-16 分解质因数(质数分解 循环)
- BASIC-17 矩阵乘法(二维数组 循环 矩阵):未提交通过,目前没找到代码问题出在哪
- BASIC-18 矩形面积交(判断 线段交)
- BASIC-19 完美的代价(90%通过,还未改好)
- BASIC-01 A+B问题
记录蓝桥杯刷题过程
目录
一、基础练习
BASIC-01 A+B问题
A,B=map(int,input().split()); #map(function, iterable, ...),根据提供的函数function对指定序列做映射
#序列中的每一个元素调用 function 函数
#input() 接收多个用户输入需要与split()结合使用
#对input输入内容调用split函数进行分割
print(A+B);
BASIC-02 序列求和
n=int(input())
ans=n*(n+1)/2 #因为数据规模过大,所以没有采用for循环
print(int(ans))
BASIC-03 圆的面积
import math #import导入math库函数,后续调用Π
r=int(input())
s=math.pi*r*r
print('%.7f' %s) #四舍五入,保留小数点后7位
BASIC-04 斐波那契数列
n=int(input())
F1,F2=1,1
for i in range(3,n+1):
F1,F2=F2%10007,(F1+F2)%10007 #先取余再递推防止超时
print(F2)
BASIC-1 闰年判断
y=int(input())
if (y%4==0 and y%100!=0) or y%400==0:
print("yes")
else:
print("no")
BASIC-2 01字串
for i in range(0,32):
a=str(bin(i)[2:]) #bin() 返回一个整数 int 或者长整数 long int 的二进制表示
#bin(1) 返回0b1, [2:]去掉0b
a='0000'+a #位数不足补零
print(a[-5:]) #输出最后5位
BASIC-3 字母图形
n,m=map(int,input().split()) #行 列
str1=[]
for i in range(m): #range(m)等价于range(0,m) 左闭右开
str1.append(chr(ord('A')+i))
for j in range(len(str1)):
print(str1[j],end='') #print 默认输出是换行的,如果要实现不换行需要在变量末尾加上 end=""
print()
for k in range(1,n):
str1.insert(0,chr(ord('A')+k)) #insert() 函数用于将指定对象插入列表的指定位置。
str1.pop() #pop() 函数用于移除列表中的一个元素(默认最后一个元素)
for p in range(len(str1)):
print(str1[p],end='')
print()
#ord()函数就是用来返回单个字符的ascii值(0-255)或者unicode数值()
#chr()函数是输入一个整数[0,255]返回其对应的ascii符号,两个函数的作用刚好相反
BASIC-4 数列特征
n=int(input())
b=input().split()
nums=[int(i) for i in b] #列表推导式 variable = [列表生成元素表达式 for out_exp in input_list if 条件]
print(max(nums))
print(min(nums))
print(sum(nums))
BASIC-5 查找整数
n=int(input())
lst=list(map(int,input().split())) #list() 转换为列表
a=int(input())
if a in lst:
print(lst.index(a)+1) #index() 函数用于从列表中找出某个值第一个匹配项的索引位置。
else:
print(-1)
BASIC-6 杨辉三角形
n=int(input())
nums=[[0]*n for i in range(n)] #初始化一个n*n的零阵
for i in range(n):
for j in range(n):
if j==0:
nums[i][j]=1
else:
nums[i][j]=nums[i-1][j-1]+nums[i-1][j] #杨辉三角关键!
if nums[i][j]!=0:
print(nums[i][j],end=' ')
print()
BASIC-7 特殊的数字1
for i in range(100,1000):
a=list(str(i))
if i==pow(int(a[0]),3)+pow(int(a[1]),3)+pow(int(a[2]),3):
print(i)
#pow(x,y)表示求解x的y次幂
#pow(x,y,z)表示求解x的y次幂对z取余后的结果
BASIC-7 特殊的数字2
for i in range(1,10):
for j in range(0,10):
for k in range(0,10):
if((100*i+10*j+k)==(i*i*i+j*j*j+k*k*k)):
print(100*i+10*j+k)
BASIC-8 回文数1
for i in range(1000,10000):
if str(i)==str(i)[::-1]: #str[开始:结束:步长] str(i)[::-1]相当于倒序排列
print(i)
BASIC-9 特殊回文数
n=int(input())
for i in range(10000,1000000):
ans=0
a=str(i)
if a==a[::-1]: #倒序
for j in a: #字符串
ans+=int(j)
if ans==n:
print(a)
BASIC-10 十进制转十六进制
a=int(input())
if a>=0 and a<=2147483647:
s=hex(a).upper() #hex() 函数用于将10进制整数转换成16进制,以字符串形式表示
#upper()将字符串中的小写字符自动转化为大写
print(s[2:]) #不加[2:] ,输出结果带0X
'''这里拓展一下字符串大小写转化的方法:
lower()方法可将字符串中的所有大写字母变为小写
capwords函数将一个字符串中的所有独立的英文单词的首字母都转换为大写。
eg:
import string
s='CASsds sads'
print(string.capwords(s))
'''
BASIC-11 十六进制转八进制
n=int(input())
for i in range(n):
if n<=10:
s=input() #所有输入默认字符串
if len(s)<=100000:
res_1=int(s,16) #这里的int(s,16)代表把16进制的s转化成10进制
res_2=oct(res_1) #这里的oct代表把一个整数转化为八进制
print(res_2[2:]) #这里的[2:]是代表结果从第三位开始输出,避免0o出现
'''进制转化的一些方法:
在python中二进制用0b加相应数字来表示,8进制用0o加相应数字来表示,16进制用0x加相应数字来表示。即:
>>> bin(2) #十进制转换二进制#
'0b10'
>>> bin(0o10) #八进制转换二进制#
'0b1000'
>>> bin(0xf) #十六进制转换二进制#
'0b1111'
#其他进制转换为八进制#
>>> oct(0b101)
'0o5'
>>> oct(0xf)
'0o17'
>>> oct(0o123)
'0o123'
#其他进制转换为十六进制#
>>> hex(0o10)
'0x8'
>>> hex(3)
'0x3'
>>> hex(0b111)
'0x7'
'''
'''
#其他进制转换为十进制#
>>> int(0o10)
8
>>> int(0xf)
15
>>> int(0b10)
2
'''
BASIC-12 十六进制转十进制
str1=input()
num=int(str1,16) #int(str1,16)表示把一个16进制的数转化为10进制
print(num)
BASIC-13 数列排序
n=int(input())
if n>=1 and n<=200:
s=list(map(int,input().split())) #一定要将列表中的数据转换为int型,后续方便比大小
s.sort() #默认reverse=False从小到大输出,reverse=True则相反
for j in range(len(s)):
print(s[j],end=' ')
BASIC-14 时间转换(取余 数字字符混合输出)
n=int(input())
a=n//3600
b=(n%3600)//60
c=n%3600%60
print(a,b,c,sep=":") #print(str(n//3600)+":"+str(n%3600//60)+":"+str(n%60))
#sep指定参数之间的分隔符。
BASIC-15字符串对比(字符串 大小写)
a=input()
b=input()
if len(a)!=len(b):
print(1)
else:
if a==b:
print(2)
else:
if a.upper()==b.upper():
print(3)
else:
print(4)
BASIC-16 分解质因数(质数分解 循环)
def primeNumber(n): # 判断素数
for i in range(2,int(n**0.5)+1):
if n % i == 0:
return False #此时不是素数
else:
return True
def qualityDecomposition(tmp): #质因数分解
for i in range(2, tmp + 1):
if tmp % i == 0:
tmp = tmp // i
tmpL.append(i)
qualityDecomposition(tmp)
break
# 输入
a,b=map(int,input().split())
while a != b+1:
tmpL = [] # 存放质因数
if primeNumber(a):
print("{}={}".format(a, a)) #str.format(),格式化字符串的函数,通过 {} 和 : 来代替以前的 %
else:
print("{}=".format(a, a),end="")
qualityDecomposition(a)
for i in range(len(tmpL)):
print(tmpL[i],end='')
if i == len(tmpL) - 1:
print('')
else:
print("*",end='')
a += 1
'''
素数判断:因为如果它不是质数,那么它一定可以表示成两个数(除了1和它本身)相乘,
这两个数必然有一个小于等于它的平方根。只要找到小于或等于的那个就行了
>>>"{} {}".format("hello", "world") # 不设置指定位置,按默认顺序
'hello world'
>>> "{0} {1}".format("hello", "world") # 设置指定位置
'hello world'
>>> "{1} {0} {1}".format("hello", "world") # 设置指定位置
'world hello world'
'''
BASIC-17 矩阵乘法(二维数组 循环 矩阵):未提交通过,目前没找到代码问题出在哪
import numpy as np
n,m = map(int,input().split())
s = [[i for i in map(int,input().split())]for j in range(n)] #n行,每行n个
l = np.array(s) #将列表转化为矩阵的形式
k = np.array(s)
if 1<=n<=30 and 0<=m<=5:
if m==0:
l=[[0]*n for i in range(n)] #初始化一个n*n的零阵
for i in range(n):
for j in range(n):
if i==j and n!=1:
l[i][j]=1
elif m>1:
for i in range(m-1):
l = np.dot(l,k) #将l矩阵和k矩阵相乘
for i in range(n):
for j in range(n):
if j==n-1:
if i==n-1:
print(l[i][j],end='')
else:
print(l[i][j])
else:
print(l[i][j],end=' ')
BASIC-18 矩形面积交(判断 线段交)
a = [float(i) for i in input().split()] #第一个矩形
b = [float(j) for j in input().split()] #第二个矩形
x1 = max(min(a[0],a[2]),min(b[0],b[2]))
x2 = min(max(a[0],a[2]),max(b[0],b[2]))
y1 = max(min(a[1],a[3]),min(b[1],b[3]))
y2 = min(max(a[1],a[3]),max(b[1],b[3]))
if x2-x1<0 or y2-y1<0:
res=0
else:
res=(y2-y1)*(x2-x1)
print("{:.2f}".format(res)) # {} 和 : 来代替以前的 % print('%.2f' %res)
BASIC-19 完美的代价(90%通过,还未改好)
n=int(input())
pal=list(input())
count=0 #交换次数
flag=0 #判断是否有一个单纯的奇个数的字符
i=0 #计数外层丢弃的字符(单侧)
while(len(pal)>1):
for k in range(len(pal)-1,0,-1): #从后面往前一直到1,寻找和pal[0]相同的pal[k]
if pal[k]==pal[0]:
count+=len(pal)-k-1
pal.pop(0)
pal.pop(k-1) #把找到的字符移到最外层
i+=1
break
elif k==1: #如果找不到相同的,字符放中间
pal.pop(0)
if n%2==0 or flag==1: #偶数个字符,存在一个字符出现奇数次/奇数个字符,但已经有一个字符出现奇数次了
print("Impossible")
exit()
flag=1
count+=int(n/2)-i #把出现奇数次的字符直接移到中间需要的步数
print(count)