蓝桥杯python(题目思路即解答(笔记))

本文是作者为蓝桥杯比赛准备的Python算法笔记,涵盖了基础练习和算法训练,包括A+B问题、数列排序、回文数、杨辉三角形、印章问题、拿金币问题等,并提供了相应的解题思路和代码。文章鼓励读者分享和讨论不同的解题方法。
摘要由CSDN通过智能技术生成

这篇文章是为蓝桥杯做准备时顺便做的笔记,用来讨论即参考用的,如有错误欢迎指正,有更好的方法也可以提出来一起讨论,谢谢各位大佬们orz
因为本人不是VIP,只能刷蓝桥杯里面的普通题,还请见谅orz
注:代码中的input别尚自加东西进去,会报错。别问,问就是血淋淋的教训,改了半个小时的代码QAQ

基础练习

A+B问题

content = input()
str_list = content.split(' ')
int1 = int(str_list[0])
int2 = int(str_list[1])
result = int1 + int2
print(result)

数列排序

这道题我自己写了一个快速排序,也是给自己做练习用的,可以直接用python自带的排序函数

python自带函数
n = int(input())
arr = list(map(int,input().split()))
arr = sorted(arr)
for i in range(n):
    print(arr[i],end=' ')
快速排序
n = int(input())
arr = list(map(int,input().split()))
def partition(arr,low,high):
    i = low
    j = high
    if low < high:
        key = arr[low]
        while i < j:
            while arr[j] >= key and j != i:#向前寻找,找寻比key小的数
                j-=1
            arr[i],arr[j] = arr[j],arr[i]#交换位置
            while arr[i] < key and i != j:#向后寻找,找寻比key大的数
                i+=1
            arr[j],arr[i] = arr[i],arr[j]#交换位置
        else:
            partition(arr,low,i-1)
            partition(arr,i+1,high)
partition(arr,0,n-1)
for i in range(n):
    print(arr[i],end=' ')

十六进制转八进制

n = int(input())
arr = []
j = 0
for i in range(n):
    arr.append(input())
for i in arr:
    print(oct(int(i,16)).split('o')[-1])

十六进制转十进制

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

十进制转十六进制

这道题里面的输出要注意,他要求输出的字母是大写,所以可以用upper函数转过来

n = int(input())
a = hex(n).split('x')[-1]
print(a.upper())

特殊回文数

代码中的continue是出于习惯加进去的,听说在循环里能加快运行速度,但实际本人并没有测试过

n = int(input())
for i in range(10000,1000000):
    istr = str(i)
    if istr[:] == istr[::-1]:
        b = [int(j) for j in istr]
        if sum(b) == n:
            print(i)
        else:
            continue
    else:
        continue

回文数

回文数的特点就是正向读和反向读是一样的,所以可以直接判定字符串正向和反向是否相同即可

for i in range(1000,10000):
    istr = str(i)
    if istr[:] == istr[::-1]:
        print(i)

特殊的数字

def ok(a):#用于映射
    return a**3
for i in range(100,1000):
    istr = str(i)
    iint = [int(j) for j in istr]
    iint = list(map(ok,iint))
    if sum(iint) == i:
        print(i)

杨辉三角形

方法一
n = int(input())
k = []#用来存储杨辉三角形的元素
for i in range(1,n+1):
    if i == 1:
        k.append(1)
        print(1)
    else:
        for j in range(1,i+1):
            if j == 1:#第一列都是1
                print(1,end=' ')
                k.append(1)
            elif j == i:#每行的最后一列也是1
                print(1)
                k.append(1)
            else:
            #从杨辉三角形中找规律,可以发现除第一列和最后一列的元素,其它的都是其上一行正上方的元素加左上角的元素,所以找到其在列表k中对应的位置即可
                num = int(i*(i+1)/2) - i + j
                k.append(k[num-i]+k[num-i-1])
                print(k[num-i]+k[num-i-1],end=' ')
方法二

  第一个方法就直接推规律即可,第二个方案是按照杨辉三角的规律公式来的,每个元素的值与其行列的关系如下: a i j = C i − 1 j − 1 a_{ij}=C_{i-1}^{j-1} aij=Ci1j1
其中 i i i表示第 i i i行, j j j表示第 i i i行内从左到右第

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值