【Python】蓝桥杯基础练习前17题详解|一题多解

如题,如果对你有帮助的话可以小小滴赞一下o(* ̄▽ ̄*)ブ~

1.A+B问题

比较简单,题目要求在一行输入,用map函数即可

a, b = map(int, input().split())
print(a + b)

2.数列排序

直接用python的内置sort函数解决,法二和法一比起来控制了空格的输出,更为严谨

# 法一
n = int(input())  # 输入一个整数
lst = list(map(int, input().split()))
lst.sort()
for i in lst:
    print(i, end=" ")
print("")

# 法二
n = int(input())
lst = list(map(int, input().split()))
lst.sort()
for i in range(0, len(lst)):
    # range()函数是左闭右开
    if i == len(lst) - 1:
        print(lst[i])
        break
    else:
        print(lst[i], end=" ")

3.十六进制转八进制

同样用内置函数解决,有详细注释,如果有必要可以单独出一篇博客

n = int(input())
lst = []
for i in range(n):
if 1 <= n <= 10:
# 相当于0~n,左闭右开,一共n个元素,下标从0~n-1
    # 二/八/十六(准确来说是2~36均可)->十进制整数 int()
    # 十进制整数->十六进制整数 hex()
    # 十进制整数->二进制 bin()
    # 十进制整数->八进制 oct()
    num = input()
    if len(num) <= 100000:
                temp = int(num, 16)  # 将16进制的所输入数转换为10进制数
                # 或者这里可以 temp=int(num,0),但前提是你以'0x+num'的形式输入这个字符串
                temp = oct(temp)  # 再把10进制数转换为八进制数
                # 这个时候你转换出来的是一个字符串,且带0x+num,为了把数字提出来,使用切片的方法
                temp = temp[2:]  # 把第二位及以后的提取出来
                lst.append(temp)
for i in lst:
    print(i, end='\n')  # 每打印一个字符换行做结

4.十六进制转十进制

内置函数用于进制转换不区分大小写

num = input()
if len(num) <= 8:
    print(int(num, 16))

5.十进制转十六进制

num = int(input())
if 0 <= num <= 2147483647:
    num = hex(num)
    num = num[2:]
    num = num.upper()
    print(num)

6.特殊回文数

n = int(input())
if 1 <= n <= 54:
for num in range(10000, 1000000):
# 五位数和六位数,则取值为10000~999999
    string = str(num)
    if string == string[::-1]:  # 如果是回文数
        if n == sum(int(i) for i in list(string)): 
        # 将字符串转列表,进行求和
            print(string)

7.回文数

# 法一:同样的,1000~9999
for i in range(1000, 10000):
# 注意range是左闭右开的,右侧是10000才能包含9999
    str1 = str(i)
    str2 = str1[::-1]
    if str1 == str2:
        print(i)

# 法二:碰瓷法
for a in range(1, 10):  # 最高位起码得为1吧
    for b in range(0, 10):
        for c in range(0, 10):
            for d in range(0, 10):
                res1 = a * 1000 + b * 100 + c * 10 + d
                res2 = a * 1 + b * 10 + c * 100 + d * 1000
                if res1 == res2:
                    print(res1)

8.特殊的数字

其实就是水仙花数

# 法一:(暴力)三位整数只能是100~999
# 这里有一个非常易错的问题,python中的地板除是//
for num in range(100, 999):
    a = num // 100
    b = num // 10 % 10
    c = num % 10
    if pow(a, 3) + pow(b, 3) + pow(c, 3) == num:
        print(num)

# 法二:整形转字符串,提取每一位数字后转整形
for num in range(100, 999):
# 提取num中的每一位
    Sum = 0
    for i in str(num):
        Sum = Sum + pow(int(i), 3)
    if Sum == num:
        print(num)

# 法三:组合数字碰瓷法
for a in range(1, 10):  # 最高位数字从1开始就是三位数
    for b in range(0, 10):
        for c in range(0, 10):
            res = a * 100 + b * 10 + c
            if pow(a, 3) + pow(b, 3) + pow(c, 3) == res:
                print(res)

9.杨辉三角形

用二维列表的方式来表示

# python中的二维数组
n = int(input())
if 1 <= n <= 34:
    triangle = [[1], [1, 1]]
    # 前两行已知了
    for i in range(2, n):
        pre = triangle[i - 1]  # 上一行
        now = [1]  # 第一个元素是1
        for j in range(i - 1):  # 做i-1次和上一行配合的运算
            now.append(pre[j] + pre[j + 1])
        now.append(1)  # 最后一个元素是1
        triangle.append(now)  # 二维数组直接添加一维数组
    for i in triangle:  # i代表每一行
        for j in i:  # j代表一行中的每一个元素
            print(j, end=" ") 
        print("")  # 每打印完一行换行

10.查找整数

n = int(input())
lst = list(map(int, input().split()))  # 能满足任意数量
find = int(input())
for i in lst:
    if i == find:
        print(lst.index(i) + 1)
        break
        # 如果是在if中找到了break后也不进入else
        # 如果没有if都不成立,才进入else
else:
print("-1")

11.数列特征

直接用自带的函数即可

n = int(input())
if 1 <= n <= 10000:
    lst = list(map(int, input().split()))
print(max(lst))
print(min(lst))
print(sum(lst))

12.字母图形

n, m = map(int, input().split())
if n >= 1 and m <= 26:
    # 构造第一行
    Str = ""
    for j in range(m):
        Str += chr(65 + j)
    print(Str) 
    for i in range(n - 1):  # 进行4次操作
        # 注意这里会犯一个比较容易犯的错误:字符串是不可更改的对象
        # 需要拆成列表对元素进行更改过后再用join组合起来
        lst = list(Str)
        for j in range(m - 1, 0, -1):
            lst[j] = lst[j - 1]
        lst[0] = chr(65 + (i + 1))
        Str = ''.join(lst)
        print(Str)

13.01字串

for i in range(0, 2):
    for j in range(0, 2):
        for k in range(0, 2):
            for m in range(0, 2):
                for n in range(0, 2):
                    print(i, j, k, m, n, sep="")
                    # 默认每两个数字之间是空格,这里用sep=""设置无间隔

14.闰年判断

def leap_year(n):
    if (n % 4 == 0 and n % 100 != 0) or n % 400 == 0:
        print("yes")
    else:
        print("no")


n = int(input())
leap_year(n)

15.斐波那契数列

用迭代替换递归,否则超时

# def fib(n):
#     if n==1 or n==2:
#         return 1
#     elif n>2:
#         return fib(n-1)+fib(n-2)
#
# n=int(input())
# if n>=1 and n<=1000000:
#     print(fib(n)%10007)
# 上面这种做法会超时,因为正向推fib就是一个满二叉树
# 下面这种做法直接每一步都求余数且没用递归,而是迭代
def fibo(n):
# python逗号表达式
    a, b = 1, 1  # a=1,b=1
    for i in range(2, n + 1):
        # 从2~n
        # 直接每一步都算余数反而更方便
        a, b = b, (a + b) % 10007
        # 相当于 a=b,b=(a+b)%10007
    return a


n = int(input())
print(fibo(n))

16.圆的面积

# pi=3.14159265358979323
import math

r = int(input())
s = math.pi * r * r
print("{:.7f}".format(s))

17.序列求和

# def myfun(n):
#     sum=0
#     for i in range(1,n+1):
#         sum=sum+i
#     return sum
# n=int(input())
# print(myfun(n))
# 靠,超时了,那就直接等差数列求和了
n = int(input())
print(int(((1 + n) * n) / 2))

如果有更好的方法或者见解以及发现的错误,欢迎在评论区中发言~

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值