1蓝桥杯练习系统 python


记录蓝桥杯刷题过程


目录

一、基础练习

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)
            
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值