题目来自 第十一届蓝桥杯 B组
第一题:门牌制作
er = 0
for i in range(1, 2021):
a = list(str(i))
er += a.count('2')
print(er)
结果:
第二题:既约分数
totle_amount=0
def func(a,b):
x = a % b
while (x != 0):
a = b
b = x
x = a % b
return b
for i in range(1,2021):
for j in range(1,2021):
if func(i,j)==1:
totle_amount+=1
print(totle_amount)
第三题:蛇形填空
def fun(n):
while n-1>=1:
return fun(n-1)+4*(n-1)
else:
return 1
print(fun(20))
第四题:跑步锻炼
import datetime
star_date = datetime.date(2000, 1, 1)
end_date = datetime.date(2020, 10, 1)
days = datetime.timedelta(days=1)
count = 0
while(star_date <= end_date):
if(star_date.day == 1 or star_date.isoweekday()==1):
count += 2
else:
count += 1
star_date += days
print(count)
第五题:七段码
import numpy as np
import itertools as it
class UnionFind:
def __init__(self, n):
self.father = list(range(n))
self.size = [1] * n
# 当前连通分量数目
self.setCount = n
def find(self, x):
if self.father[x] == x:
return x
self.father[x] = self.find(self.father[x])
return self.father[x]
def merge(self, x, y):
x, y = self.find(x), self.find(y)
if x == y:
return False
if self.size[x] < self.size[y]:
x, y = y, x
self.father[y] = x
self.size[x] += self.size[y]
self.setCount -= 1
return True
res = 0
data = list(np.zeros((7, 7)))
data[0][1] = data[0][5] = 1
data[1][0] = data[1][6] = data[1][2] = 1
data[2][1] = data[2][3] = data[2][6] = 1
data[3][2] = data[3][4] = 1
data[4][3] = data[4][5] = data[4][6] = 1
data[5][0] = data[5][4] = data[5][6] = 1
num = [i for i in range(0, 7)]
for i in range(1, 8):
total = it.combinations(num, i)
for j in total:
uf = UnionFind(7)
for z in j:
for k in range(len(data[z])):
z = int(z)
b = int(data[z][k])
if b == 1 and k in j:
uf.merge(z, k)
if uf.setCount == 7 - len(j) + 1:
res += 1
print(res)
第六题:成绩统计
n = int(input())
x, y = 0, 0
for _ in range(n):
score = int(input())
if score >= 60:
x += 1
if score >= 85:
y += 1
print(f"{round(100 * x / n)}%")
print(f"{round(100 * y / n)}%")
第七题:回文日期
from calendar import isleap
gap_year = [0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
normal_year = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
def judge(date, is_gap):
month = int(date[:2])
day = int(date[2:])
if month > 12:
return False
if is_gap:
return day < gap_year[month]
else:
return day < normal_year[month]
def judge_next_year(year: str):
res_year = year[::-1]
new_year = year + res_year
revers_str = new_year[::-1]
if new_year == revers_str:
is_gap = isleap(int(year))
flag = judge(res_year, is_gap)
if flag:
return [True, revers_str]
else:
return [False, revers_str]
else:
return [False, revers_str]
def get_next(data: str):
year = data[:4]
res = list()
while True:
year = str(int(year) + 1)
ans = judge_next_year(year)
flag, tmp = ans[0], ans[1]
if flag:
res.append(tmp)
break
num = int(data[0:2])
while True:
num += 1
year = str(num) + str(num)
ans = judge_next_year(year)
flag, tmp = ans[0], ans[1]
if flag:
res.append(tmp)
break
return res
if __name__ == '__main__':
data = input()
res = get_next(data)
for i in res:
print(i)
第八题:子串分值和
def fun(s):
x = 0
for i in range(len(s)):
for j in range(len(s) - i):
a = s[j:j+i+1]
a = set(a)
x+=len(a)
return x
print(fun('ababc'))
第九题:平面切分
N=int(input())
input_lis=[]
crosspoint_x_set=set()
for i in range(N):
input_lis.append(list(map(int,input().split())))
input_lis=list(set([tuple(t) for t in input_lis]))
each_line_num_lis = [1] * (len(input_lis) + 1)
for i in range(1,len(input_lis)):
crosspoint_x_set.clear()
for n in range(i):
if input_lis[i-n-1][0]!=input_lis[i][0]:
x=round((input_lis[i][1]-input_lis[i-n-1][1])/(input_lis[i-n-1][0]-input_lis[i][0]),4)
crosspoint_x_set.add(x)
each_line_num_lis[i] += len(crosspoint_x_set)
print(sum(each_line_num_lis) )
第十题:字串排序
def px(words):
count = 0
for i in range(len(words)):
for j in range(i+1,len(words)):
if words[i] > words[j]:
words[i], words[j] = words[j], words[i]
count += 1
return count
print(px(list('askfjhsafa')))