第十一届蓝桥杯大赛第二场省赛试题C&C++ 大学B组真题 python实现

目录

  • A.门牌制作
  • B.既约分数
  • C.蛇形填数
  • D.跑步锻炼
  • E.七段码
  • F.成绩统计
  • G.回文日期
  • H.字串分值和
  • I.平面切分
  • J.字串排序

A.门牌制作

第十一届蓝桥杯大赛第二场省赛试题C&C++ 大学B组真题 python实现_第1张图片
代码:

num = 0
for i in range(1, 2021):
    i = str(i)
    num += i.count('2')
print(num)

答案: 624

B.既约分数

第十一届蓝桥杯大赛第二场省赛试题C&C++ 大学B组真题 python实现_第2张图片
代码:

num = 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:
			num += 1
print(num)
	

答案:2481215

C.蛇形填数

第十一届蓝桥杯大赛第二场省赛试题C&C++ 大学B组真题 python实现_第3张图片
代码:

dir = 0  # 0代表向右,1代表向下
a = [[0 for i in range(100)] for j in range(100)]
x, y = 0, 0
num = 1
while True:
    if x == 19 and y == 19:
        break
    while dir == 0:
        x, y = x, y+1
        num += 1
        while y != 0:
            x += 1
            y -= 1
            num += 1
            if x == 19 and y == 19:
                print(num)
                break
        dir = 1
    while dir == 1:
        x, y = x+1, y
        num += 1
        while x != 0:
            x -= 1
            y += 1
            num += 1
            if x == 19 and y == 19:
                print(num)
                break
        dir = 0

答案: 761

D.跑步锻炼

第十一届蓝桥杯大赛第二场省赛试题C&C++ 大学B组真题 python实现_第4张图片
代码:

year = 2000
month = 1
day = 1
week = 6
res = 0
dateday = [0,31,28,31,30,31,30,31,31,30,31,30,31]

# 闰年判断
def run(year):
        if year % 4 == 0 and year % 100 != 0:
                return True
        elif year % 400 == 0:
                return True
        else:
                return False

while year != 2020 or month != 10 or day != 1:
        if run(year):
                dateday[2] = 29
        else:
                dateday[2] = 28
        day += 1

        week = (week+1)%7

        if day > dateday[month]:
                day = 1
                month += 1
        if month > 12:
                month = 1
                year += 1
        if day == 1 or week == 1:
                res += 1
        res += 1
res += 2
print(res)

答案: 8879

E.七段码

第十一届蓝桥杯大赛第二场省赛试题C&C++ 大学B组真题 python实现_第5张图片
代码:

这个可以数发光的个数:
172103164205196771种
ans = 7 + 10 + 16 + 20 + 19 + 7 + 1 = 80
一共80

F.成绩统计

第十一届蓝桥杯大赛第二场省赛试题C&C++ 大学B组真题 python实现_第6张图片
第十一届蓝桥杯大赛第二场省赛试题C&C++ 大学B组真题 python实现_第7张图片
第十一届蓝桥杯大赛第二场省赛试题C&C++ 大学B组真题 python实现_第8张图片
代码:

n = int(input())
num1 = 0
num2 = 0
for i in range(n):
    stu = int(input())
    if stu >= 60:
        num1 += 1
    if stu >= 85:
        num2 += 1
print('{:d}%'.format(round(num1/n*100)))
print('{:d}%'.format(round(num2/n*100)))

G.回文日期

第十一届蓝桥杯大赛第二场省赛试题C&C++ 大学B组真题 python实现_第9张图片
第十一届蓝桥杯大赛第二场省赛试题C&C++ 大学B组真题 python实现_第10张图片
第十一届蓝桥杯大赛第二场省赛试题C&C++ 大学B组真题 python实现_第11张图片
代码:

from calendar import isleap
n = int(input())

def check(year):
    month = int(year[:2])
    day = int(year[2:4])
    year = int(year)
    if 1 <= month <= 12:
        if month == 2:
            if isleap(year):
                if day <= 29:
                    return True
                else:
                    return False
            else:
                if day <= 28:
                    return True
                else:
                    return False
        if month in [1,3,5,7,8,10,12]:
            if day <= 31:
                return True
            else:
                return False
        else:
            if day <= 30:
                return True
            return False
    return False
arr1 = []
arr2 = []
for i in range(1000, 9999):
    x1 = str(i)[::-1]
    x2 = (str(i)[:2]+str(i)[:2])[::-1]
    if check(x1) and int(x1[::-1]+x1)>n:
        arr1.append(int(x1[::-1]+x1))
    if check(x2) and int(x2[::-1]+x2)>n:
        arr2.append(int(x2[::-1]+x2))

print(arr1[0])
print(arr2[0])

H.字串分值和

第十一届蓝桥杯大赛第二场省赛试题C&C++ 大学B组真题 python实现_第12张图片
第十一届蓝桥杯大赛第二场省赛试题C&C++ 大学B组真题 python实现_第13张图片
第十一届蓝桥杯大赛第二场省赛试题C&C++ 大学B组真题 python实现_第14张图片
代码:
暴力解法肯定不能ac,大概50%是可以过的

s = input()
n = len(s)
res = 0
left = 0
right = 0
while left < n:
    if right == n:
        left += 1
        right = left
    right += 1
    s_ = set(s[left:right])
    res += len(s_)
print(res)

I.平面切分

第十一届蓝桥杯大赛第二场省赛试题C&C++ 大学B组真题 python实现_第15张图片
代码:

n = int(input())
li = []
for i in range(n):
    li.append(list(map(int, input().split())))
res = 2 
node = []
for i in range(1, n):
    for j in range(i):
      if li[i][0] != li[j][0]:
        x = (li[i][1] - li[j][1]) / (li[j][0] - li[i][0])
        y = li[j][0] * x + li[j][1] 
        if [x, y] in node:
            pass
        else:
            node.append([x, y]) 
    res += len(node) + 1
    node = []
print(res)

J.字串排序

第十一届蓝桥杯大赛第二场省赛试题C&C++ 大学B组真题 python实现_第16张图片
第十一届蓝桥杯大赛第二场省赛试题C&C++ 大学B组真题 python实现_第17张图片
第十一届蓝桥杯大赛第二场省赛试题C&C++ 大学B组真题 python实现_第18张图片
这道题emmmm就这样吧 大体就是dfs的思路

你可能感兴趣的:(蓝桥杯,蓝桥杯,python,算法)