目录
蓝桥杯基础题题库连接:点我
需要题目的可以到题库里面去看看,或者直接在百度搜索题目名称
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 致谢
谢谢来自互联网上各各大佬的资源分享,具体参考的那些,不清楚啦。