【思特奇杯·云上蓝桥-算法集训营】 结营作业

试题A:门牌制作

 

代码

menpai = 0
for i in range(1,2021):
    for j in str(i):
        if j == "2":
            menpai += 1
print(menpai)

结果

 

试题B:寻找2020

 

 

代码

matrix = [[2,2,0,0,0,0],[0,0,0,0,0,0],[0,0,2,2,0,2],[0,0,0,0,0,0],\
          [0,0,0,0,2,2],[0,0,2,0,2,0]]
row = len(matrix)
col = len(matrix[0])
count = 0
for i in range(row):
    for j in range(col):
        if j+3 < col:
            if str(matrix[i][j])+str(matrix[i][j+1])+str(matrix[i][j+2])\
               +str(matrix[i][j+3]) == "2020":
                count += 1
        if i+3 < row:
            if str(matrix[i][j])+str(matrix[i+1][j])+str(matrix[i+2][j])\
               +str(matrix[i+3][j]) == "2020":
                count += 1
        if i+3 < row and j+3 < col:
            if str(matrix[i][j])+str(matrix[i+1][j+1])+str(matrix[i+2][j+2])\
               +str(matrix[i+3][j+3]) == "2020":
                count += 1
print(count)

结果

 

试题C:跑步锻炼

 

代码

import datetime

num = 0
start_time = datetime.datetime(2000, 1, 1)
end_time = datetime.datetime(2020, 10, 1)
while start_time <= end_time:
    if start_time.day == 1 or start_time.weekday() == 0:
        num += 2
    else:
        num += 1
    start_time += datetime.timedelta(days=1)
print(num)

结果

 

试题D:蛇形填数

 

代码

if __name__ == '__main__':
    x, y, n = 0, 1, 2
    f = 1
    li = [[0] * 100 for i in range(100)]
    li[0][0], li[0][1] = 1, 2
    while f:
        while y > 0:
            if x == 19 and y == 19:
                f = 0
                break
            y -= 1
            x += 1
            n += 1
            li[x][y] = n
        if f:
            x += 1
            n += 1
            li[x][y] = n
        while x > 0:
            if x == 19 and y == 19:
                f = 0
                break
            x -= 1
            y += 1
            n += 1
            li[x][y] = n
        if f:
            y += 1
            n += 1
            li[x][y] = n
    print(n)
    for i in range(100):
        for j in range(100):
            print(li[i][j], end=" ")
        print()

结果

 

试题E:排序

 

代码

def bubble_sort(alist):
    count = 0
    for i in range(len(alist)-1,0,-1):
        for j in range(i):
            if alist[j] > alist[j+1]:
                alist[j],alist[j+1] = alist[j+1],alist[j]
                count += 1
    print(count)

a = list('jonmlkihgfedcba')
bubble_sort(a)
print(a)

结果

试题F:成绩统计

代码

if __name__ == '__main__':
    n = int(input())
    jige, youxiu = 0, 0
    for i in range(n):
        score = int(input())
        if score >= 60:
            jige += 1
            if score >= 85:
                youxiu += 1
    print(str(round(jige / n * 100)) + "%")
    print(str(round(youxiu / n * 100)) + "%")

试题G:单词分析

 

代码

charLst = [0] * 26

string = input()

for char in string:
    charLst[ord(char)-97] += 1

max_value = max(charLst)
res_index = charLst.index(max_value)
res_chr = chr(res_index + 97)

print(res_chr)
print(max_value)

试题H:数字三角形

 

代码

if __name__ == '__main__':
    n = int(input())
    matrix = list()
    for i in range(n):
        matrix.append(list(map(int, input().split())))
    dp = [[0] * n for i in range(n)]
    dp[0][0] = matrix[0][0]
    for i in range(1, n):
        for j in range(i + 1):
            if j == 0:
                dp[i][j] = dp[i - 1][j] + matrix[i][j]
            elif j == i:
                dp[i][j] = dp[i - 1][j - 1] + matrix[i][j]
            else:
                dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - 1]) + matrix[i][j]
    print(dp[n - 1][n // 2] if n % 2 == 1 else max(dp[n - 1][n // 2 - 1], dp[n - 1][n // 2]))

试题I:平面切分

 

代码

def relation(n):
    flag = True
    for i in range(n):
        for j in range(i+1, n):
            if line[i][0] != line[j][0]:
                flag = False 
                x = -(line[i][1] - line[j][1]) / (line[i][0] - line[j][0])
                y = line[i][0] * x + line[i][1]
                point.add((x, y))
                break
    if flag: 
        return n + 1
    else:
        if len(point) == 1: 
            return 2 * n
        else: 
            return 2 * n + 1
n = int(input())
line = []
point = set()
for i in range(n):
    a, b = list(map(int, input().split()))
    line.append([a,b])
print(relation(n))

试题J:装饰珠

 

代码

A = [list(map(int, input().split())) for _ in range(6)]
m = int(input())
B = [list(map(int, input().split())) for _ in range(m)]
holes = [A[i][j] for i in range(6) for j in range(1, len(A[i]))]
holes.sort()
ball_grades = [B[i][0] for i in range(m)]
ball_values = [B[i][2:] for i in range(m)]
ball_nums = [0 for _ in range(m)]
dp = [[0 for _ in range(len(holes))] for _ in range(m)]
if holes[0] >= ball_grades[0]:
    dp[0][0] = ball_values[0][0]
    ball_nums[0] += 1
for j in range(1, len(holes)):
    if holes[j] >= ball_grades[0]:
        if ball_nums[0] >= len(ball_values[0]):
            dp[0][j] = dp[0][j-1]
        else:
            if dp[0][j-1] > ball_values[0][ball_nums[0]]:
                dp[0][j] = dp[0][j-1]
            else:
                dp[0][j] = ball_values[0][ball_nums[0]]
                ball_nums[0] += 1
for i in range(1, m):
    if holes[0] >= ball_grades[i]:
        if ball_nums[i] >= len(ball_values[i]):
            dp[i][0] = dp[i - 1][0]
        else:
            dp[i][0] = dp[i-1][0] + ball_values[i][ball_nums[i]]
            ball_nums[i] += 1
    else:
        dp[i][0] = dp[i-1][0]
for i in range(1, m):
    t2 = 0
    s = 0
    for j in range(1, len(holes)):
        if holes[j] >= ball_grades[i]:
            t2 += 1
            if t2 == 1:
                s = j - 1
            maxlim = ball_values[i][-1] if t2 > len(ball_values[i]) else ball_values[i][t2-1]
            dp[i][j] = max(dp[i-1][j], dp[i][s]+maxlim)
        else:
            dp[i][j]=dp[i-1][j]
print(dp[-1][-1])

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值