第十一届蓝桥杯大赛软件类省赛第二场C/C++大学B组(python解答)

第十一届蓝桥杯大赛软件类省赛第二场C/C++大学B组(python解答)_第1张图片

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


答案:624

第十一届蓝桥杯大赛软件类省赛第二场C/C++大学B组(python解答)_第2张图片
辗转相除法

def func(a,b):
	x = a % b
	while (x != 0):
		a = b
		b = x
		x = a % b
	return b

num=0    
for i in range(1,2021):
    for j in range(1,2021):
        if func(i,j)==1:
            num+=1
print(num)

答案:2481215
第十一届蓝桥杯大赛软件类省赛第二场C/C++大学B组(python解答)_第3张图片
小学奥数
对角线上的数分别是1,5,13,25
即可找到规律:

第n行第n列为:(n-1)^2 +n^2
print((20 - 1)**2 + 20**2)

答案:761
第十一届蓝桥杯大赛软件类省赛第二场C/C++大学B组(python解答)_第4张图片
datetime真省事

import datetime
start = datetime.date(2000, 1, 1)
end = datetime.date(2020, 10, 2)
res = 0
while start != end:
    if start.day == 1 or start.weekday() == 0 :
        res += 2
    else:
        res += 1
    start += datetime.timedelta(days=1)
print(res)

答案:8879
第十一届蓝桥杯大赛软件类省赛第二场C/C++大学B组(python解答)_第5张图片
你们的噩梦并查集回来了

from itertools import combinations
# 并查集模板
class UnionFind:
    def __init__(self, size: int):
        self.count = size
        self._father = {}
        for i in range(size):
            self._father[i] = i

        self.weight = [1] * size

    def add(self, x):
        if x not in self._father:
            self._father[x] = x

    def find(self, x):
        root = x
        while self._father[root] != root:
            root = self._father[root]

        # 路径压缩
        while x != root:
            origin_root = self._father[x]
            self._father[x] = root
            x = origin_root

        return root

    def merge(self, x: int, y: int):
        root_x = self.find(x)
        root_y = self.find(y)
        if root_x != root_y:

            if self.weight[root_x] < self.weight[root_y]:
                root_x, root_y = root_y, root_x

            self._father[root_y] = root_x
            self.weight[root_x] += self.weight[root_y]
            self.count -= 1
        if root_x == root_y:
            return False

    def is_connected(self, x, y):
        return self.find(x) == self.find(y)


res = 0
list1 = [0, 1, 2, 3, 4, 5, 6]
a = len(list1)
for i in range(1, a+1):
    for item in (combinations(list1, i)):
        n = len(item)
        uf = UnionFind(n)
        for j in range(n):
            for k in range(j+1,n):
                if abs(item[j] - item[k]) == 1 or (item[j] == 0 and item[k] == 5) or (item[j] == 1 and item[k] == 6) or (item[j] == 2 and item[k] == 6) or (item[j] == 4 and item[k] == 6):
                    uf.merge(j, k)
        if uf.count == 1:
            res += 1
print(res)

答案:80

第十一届蓝桥杯大赛软件类省赛第二场C/C++大学B组(python解答)_第6张图片

n = int(input())
passing = 0
excellence = 0
for i in range(n):
    score = int(input())
    if score >= 60:
        passing += 1
    if score >= 85:
        excellence += 1
pass_rate = passing/n*100
excellence_rate = excellence/n*100
print(str(round(pass_rate))+'%')
print(str(round(excellence_rate))+'%')

第十一届蓝桥杯大赛软件类省赛第二场C/C++大学B组(python解答)_第7张图片

import datetime

n = str(input())
m = str(99991231)
def huiWenRi(start, end):

    s = datetime.datetime.strptime(start, '%Y%m%d')
    e = datetime.datetime.strptime(end, '%Y%m%d')
    while s <= e:  # 枚举日期
        string = s.strftime("%Y%m%d")
        if string == string[::-1]:
            print(string)
            break
        s += datetime.timedelta(1) 


def ababbaba(start, end):

    s = datetime.datetime.strptime(start, '%Y%m%d')
    e = datetime.datetime.strptime(end, '%Y%m%d')
    while s <= e:  # 枚举日期
        string = s.strftime("%Y%m%d")
        if string[0:2] == string[2:4] == string[5:3:-1] == string[7:5:-1]:
            print(string)
            break
        s += datetime.timedelta(1)
huiWenRi(n,m)
ababbaba(n,m)

第十一届蓝桥杯大赛软件类省赛第二场C/C++大学B组(python解答)_第8张图片

list1=list(input())
list2=[-1 for i in range(26)]
count=0

for i in range(len(list1)):
    index=ord(list1[i])-ord('a')
    count+=(len(list1)-i)*(i-list2[index])
    list2[index]=i

print(count)

第十一届蓝桥杯大赛软件类省赛第二场C/C++大学B组(python解答)_第9张图片

n1=eval(input())
ls=[tuple(map(int,input().split(" "))) for i in range(n1)]
se=set(ls)
ls=list(se)
del se
result=0
if ls:
    result=2
    for i in range(1,len(ls)):
        a1,b1=ls[i]
        se=set()
        for j in range(i):
            a2,b2=ls[j]
            if a1==a2:
                pass
            else:
                x=(b1-b2)/(a1-a2)
                y=a1*x+b1
                se.add((x,y))
        result+=len(se)+1
print(result)

第十一届蓝桥杯大赛软件类省赛第二场C/C++大学B组(python解答)_第10张图片

你可能感兴趣的:(Python,蓝桥杯)