0
点赞
收藏
分享

微信扫一扫

蓝桥杯-基础题python

陆公子521 2022-03-20 阅读 97

目录

蓝桥杯基础题题库连接:点我
需要题目的可以到题库里面去看看,或者直接在百度搜索题目名称

1 闰年判断

#basic-1 闰年判断
year = int(input())
if (year%4==0 and year%100!=0) or year%400==0:
	#闰年:能被四整除但不能被100整除,或者能被400整除
	print("yes")
else:
	print("no")

2 01字符串

#basic-2 01字符串
#1:0-32转二进制	
for i in range(0, 32):
    res = bin(i)
    res = int(res[2:])
    print("%05d" % res)

#2:直接以二进制输出
for i in range(0,32):
    print("{:05b}".format(i))

3 字母图形

#basic-3 字母图形
# chr(65) - A
#1 (有问题,这样只能row < col才可以)
row, col = map(int, input().split())
for i in range(0, row):
    for j1 in range(0,i):
        print(chr(65 + i - j1), end='')
    for j2 in range(i, col):
        print(chr(65 + j2 - i), end='')
    print()

#2
for i in range(0, row):
    for j in range(0, col):
        a = abs(i-j) #偏移
        print(chr(65 + a), end='')
    print()

4 数列特征

#basic-4 数列特征
n = int(input())
nums = list(map(int, input().split()))
res_sum = 0
res_max = -10001
res_min = 10001
if len(nums) == n:
    for i in range(0, n):
        res_sum += nums[i]
        res_max = max(res_max, nums[i])
        res_min = min(res_min, nums[i])
print(res_max)
print(res_min)
print(res_sum)

5 查找整数

#basic-5 查找整数
#1 调用列表自带函数index()获取出现第一个数字的下标
n = int(input())
nums = list(map(int, input().split()))
target = int(input())
if n == len(nums):
    try:
        #没有该目标的话会出现异常,用try..捕获
        res = nums.index(target)
        print(res + 1)
    except:
        print(-1)
        
#2 循环遍历查找
n = int(input())
nums = list(map(int, input().split()))
target = int(input())
def fun(nums, target):
    for i in range(0, len(nums)):
        if target == nums[i]:
            return i+1
    return -1
if n== len(nums):
    print(fun(nums, target))

6 杨辉三角

#basic-6 杨辉三角
n = int(input())
triangle = [[1],[1,1]]
for i in range(2,n):     #已经给出前两行,所以求剩余行
    cur = [1]            #定义每行第一个元素
    pre = triangle[i-1]  #上一行
    for j in range(i-1): #算几次
        cur.append(pre[j] + pre[j+1])
    cur.append(1)
    triangle.append(cur)
    
for i in range(n):
    for j in range(i+1):
        print(triangle[i][j], end = ' ')
    print()

7 特殊的数字

#basic-7 特殊的数字
for i in range(100, 1000):
    bai = i // 100
    shi = i // 10 % 10
    ge = i % 10
    if i == bai**3 + shi**3 + ge**3:
        print(i)

8 回文数

#basic-8 回文数
for i in range(1000, 10000):
    s = str(i)
    if s[0] == s[-1] and s[1] == s[-2]:
        print(i)

9 特殊回文数

#basic-9 特殊回文数
n = int(input())
sums = 0
for i in range(10000, 1000000):
    s = str(i)
    if (s[0]==s[-1]) and (s[1]==s[-2] and s[2]==s[-3]):
        for ch in s:
            sums += int(ch)
        if sums==n:
            print(i)   
        sums = 0

10 十进制转十六进制

#basic-10 十进制转(十六)进制
#1 除以十六
def _10to16(n, jinzhi = 16):
    if n == 0: return '0'
    res = []
    while n:
        num = n % jinzhi
        n = n // jinzhi
        if num > 9:
            res.append(chr(65 + num - 10))
        else:
            res.append(str(num))
        res = res[::-1]
    return ''.join(res)

n = int(input())  
print(_10to16(n))
#2
res = hex(n)
print(res[2:].upper())

11 十六进制转十进制

#basic-11 (十六)进制转十进制
#1
def _16to10(nstr, jinzhi = 16):
    res = 0
    for ch in nstr:
        if (ch > 'A' or ch == 'A') and (ch < 'Z' or ch == 'Z'):
            res = res*jinzhi + ord(ch) - ord('A') + 10
        else:
            res = res*jinzhi + ord(ch) - ord('0')
    return res
nstr = inpu t()
print(_16to10(nstr))
#2
dec = int(nstr, 16)
print(dec)

12 十六进制转八进制

#basic-12 十六进制转八进制
n = int(input())
while n:
    n = n - 1
    nstr = input()
    dec = int(nstr, 16) #十六进制转十进制
    res = oct(dec)[2:] #十进制转八进制
    print(res)

13 数列排序

#basic-13 数列排序
n = int(input())
nums = list(map(int, input().split()))
#1
nums.sort()
print(nums)

#2 快速排序
def point(nums, left, right, flag=0):
    n1 = nums[right] #选取最后一个作为主元素(可以随机选取,然后放到最右边一个)
    i = left #表示第一个比n1大的值的下标
    for j in range(left, right):
        if flag == 0: #默认升序
            if nums[j] < n1 or nums[j] == n1: #将比n1小或等于的移到左边
                nums[i], nums[j] = nums[j], nums[i]
                i = i + 1
        else:
            if nums[j] > n1 or nums[j] == n1: #将比n1大于或等于的移到左边
                nums[i], nums[j] = nums[j], nums[i]
                i = i + 1
    nums[i], nums[right] = nums[right], nums[i]
    return i;

def quicksort(nums, left, right):
    if left < right: #结束条件
        pos = point(nums, left, right) #找一个点,左边比这个数小,右边比这个数大
        quicksort(nums, left, pos-1) #对左边在排序
        quicksort(nums, pos+1, right) #对右边排序
        
quicksort(nums, 0, len(nums) - 1)
print(nums)

14 时间转换

#basic-14 时间转换
n=int(input())
shi = n // 3600
fen = n % 3600 // 60
miao = n % 60
print('{}:{}:{}'.format(shi, fen, miao))

15 字符串对比

#basic-15 字符串对比
str1 = input()
str2 = input()

if len(str1) != len(str2):
    print(1)
else:
    if str1 == str2:
        print(2)
    elif str1.lower() == str2.lower():
        print(3)
    else:
        print(4)

16 分解质因数

#basic-16 分解质因数
#先从2开始分解,2, 3, 5,7,,,,
def fun(n):
    flag = True
    i = 2
    print('{}='.format(n), end='')
    while n > 1:
        if n % i == 0:
            if flag:
                print(i, end='')
                flag = False
            else:
                print('*{}'.format(i), end='')
    
            n = n // i
        else:
            i += 1
    print()

a, b = map(int, input().split())
for i in range(a, b + 1):
    fun(i)

17 矩阵乘法

#basic-17 矩阵乘法
def mul(arr1, arr2):
    #计算两个矩阵的积
    length = len(arr1)
    res = [[0 for i in range(0, length)] for j in range(0, length)]
    for i in range(0, length):
        for j in range(0, length):
            for k in range(0, length):
                res[i][j] += arr1[i][k]*arr2[k][j]
    return res

def mul_m(arr, m):
    #计算矩阵的m次幂
    res = arr
    for i in range(1, m):
        res = mul(res, arr)
    return res

n, m = map(int, input().split())
arr =[[0 for i in range(0, n)] for j in range(0, n)]
for i in range(0, n):
    arr[i] = list(map(int, input().split()))

#判断m的情况,m为零则为单位矩阵,m为1为原矩阵
if m == 0:
    for i in range(0, n):
        for j in range(0, n):
            if i == j: print(1, end=' ')
            else: print(0, end=' ')
        print()

if m == 1:
    for i in range(0, n):
        for j in range(0, n):
            print(arr[i][j], end=' ')
        print()
else:
    res = mul_m(arr, m)
    for i in range(0, n):
        for j in range(0, n):
            print(res[i][j], end=' ')
        print()

18 矩形相交面积

#basic-18 矩形相交面积
x11, y11, x12, y12 = map(float, input().split())
x21, y21, x22, y22 = map(float, input().split())
#右上角的点
x31 = min(max(x11, x21), max(x12, x22))
y31 = min(max(y11, y21), max(y12, y22))
#左下角的点
x32 = max(min(x12, x22), min(x11, x21))
y32 = max(min(y12, y22), min(y11, y21))

if x31 > x32 and y31 > y32:
    res = (x31 - x32) * (y31 - y32)
    print('%.2f' % res)
else:
    print('0.00')

19 完美代价

#basic-19 完美的代价
#主要思想:因为从两边读要一样,则从两边开始找,固定左边,从右边开始寻找与左边字符相等的,
#然后左指针加1,右指针减一,然后在剩下的字符串中重复以上步骤(要注意出现奇数次的字符)
def fun(s):
    res = 0 #记录结果
    flag = False #用于判断字符串中单个字符为奇数的个数,因为该串中只能有一个出现奇数次的字符
    N = len(s)
    j = N - 1
    for i in range(N):
        #从前往后
        for k in range(j, i - 1, -1):
            #从后往前扫描
            if k == i:
                #扫描到一个出现奇数次的字符,如果原字符串长度为偶数,则直接退出程序
                #否则该字符串为奇数个字符,可以将该字符放到中间构成回文字串,这时将flag置为True
                #如果下次再扫描到一个出现奇数次的字符,也会直接退出程序
                if n % 2 == 0 or flag:
                    print("Impossible")
                    return 0
                flag = True
                #有一个奇数次出现的字符移动的代价,相当于从i位置移动到中间的位置,代价为N // 2 - i
                res = res + N // 2 - i
            elif s[i] == s[k]:
                #找到右边与左边匹配的了,然后从k位置一步一步移到j位置,每移动一次res加1
                for t in range(k, j):
                    res += 1
                    s[t], s[t+1] = s[t+1], s[t]
                j -= 1
                break
    print(res)
    return res

n = int(input())
s = list(input())
res = fun(s)

00 致谢

谢谢来自互联网上各各大佬的资源分享,具体参考的那些,不清楚啦。

举报

相关推荐

0 条评论