蓝桥杯冲刺-倒数第八天-省赛题

目录

                ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        成绩统计

                ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        思路

                ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        代码

                ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        单词分析

                ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        思路

                ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        代码

                ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        回文日期

                ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        思路

                ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        代码

                ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        最短路

                ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        思路

                ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        代码

                ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        货物摆放 

                ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        思路

                ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        代码


成绩统计

小蓝给学生们组织了一场考试,卷面总分为 100 分,每个学生的得分都是一个 0 到 100 的整数。

如果得分至少是 60 分,则称为及格。如果得分至少为 85 分,则称为优秀。

请计算及格率和优秀率,用百分数表示,百分号前的部分四舍五入保留整 数。

思路

遍历输入全体即可,值得注意的是这道题中用到round(),意为取整函数,以及最后要用f'{}'连接字符串和数字

代码

n=int(input())
a=[]
for i in range(n):
    b=int(input())
    a.append(b)
ans1,ans2=0,0
for i in range(n):
  if 60<=a[i]:
    ans1+=1
  if 85<=a[i]:
    ans2+=1

x=round(ans1/n*100)
y=round(ans2/n*100)
print(f'{x}%')
print(f'{y}%')

单词分析

小蓝正在学习一门神奇的语言,这门语言中的单词都是由小写英文字母组 成,有些单词很长,远远超过正常英文单词的长度。小蓝学了很长时间也记不住一些单词,他准备不再完全记忆这些单词,而是根据单词中哪个字母出现得最多来分辨单词。

现在,请你帮助小蓝,给了一个单词后,帮助他找到出现最多的字母和这 个字母出现的次数。

输入描述

输入一行包含一个单词,单词只由小写英文字母组成。

对于所有的评测用例,输入的单词长度不超过 1000。

输出描述

输出两行,第一行包含一个英文字母,表示单词中出现得最多的字母是哪 个。如果有多个字母出现的次数相等,输出字典序最小的那个。

第二行包含一个整数,表示出现得最多的那个字母在单词中出现的次数。

思路

遍历输入字符串,计算出每个字母的数量,记录最大出现次数和该字母

代码

s=input()
ls="abcdefghijklmnopqrstuvwxyz"
max1=0
ans=""
for j in ls:
    cnt=0
    for i in range(len(s)):
        if j==s[i]:
            cnt+=1
    if cnt>max1:
        max1=cnt
        ans=j
print(ans)
print(max1)

回文日期

2020 年春节期间,有一个特殊的日期引起了大家的注意:2020 年 2 月 2 日。因为如果将这个日期按 “yyyymmdd” 的格式写成一个 8 位数是 20200202,恰好是一个回文数。我们称这样的日期是回文日期。

有人表示 20200202 是 “千年一遇” 的特殊日子。对此小明很不认同,因为不到 2 年之后就是下一个回文日期:20211202 即 2021 年 12 月 2 日。

也有人表示 20200202 并不仅仅是一个回文日期,还是一个 ABABBABA 型的回文日期。对此小明也不认同,因为大约 100 年后就能遇到下一个 ABABBABA 型的回文日期:21211212 即 2121 年 12 月 12 日。算不上 “千年一遇”,顶多算 “千年两遇”。

给定一个 8 位数的日期,请你计算该日期之后下一个回文日期和下一个 ABABBABA 型的回文日期各是哪一天。

输入描述

输入包含一个八位整数 N,表示日期。

对于所有评测用例,1≤N≤89991231,保证 NN 是一个合法日期的 8 位数表示。

输出描述

输出两行,每行 1 个八位数。第一行表示下一个回文日期,第二行表示下一个 ABABBABA 型的回文日期。

思路

将字符传转化成日期格式,让日期自增,再将日期格式转化成字符串,判断是否满足要求

代码

import datetime

data=input()
y=int(data[:4])
m=int(data[4:6])
d=int(data[6:8])
day1=datetime.date(y,m,d)

flag=1

for n in range(9999):
    day1=day1+datetime.timedelta(days=1)
    s=str(day1).replace("-","")

    if s==s[::-1]:
        if flag:
            print(s)
            flag=0
        if  s[1]==s[3]==s[4]==s[6]:
            print(s)
            break
        

最短路

如下图所示,G是一个无向图,其中蓝色边的长度是 1、橘色边的长度是 2、绿色边的长度是 3。则从 A 到 S 的最短距离是多少?

思路

这道题可以直接从图中看出来,最小值是6,但我们为了学习一下深度优先搜索,这里认真做一下。 深搜的思路是从A开始出发,向他的邻接点深度搜索,每次深入增加num,即此路径的边长之和。如果找到了S,停止递归,将num存储在列表中。最终输出该列表的最小值,就是我们要的最小路径。

代码

r_list = [
    ["A", "E", 1],
    ["A", "B", 2],
    ["A", "C", 1],
    ["A", "D", 1],
    ["A", "E", 1],
    ["B", "G", 1],
    ["B", "J", 2],
    ["C", "D", 3],
    ["C", "G", 3],
    ["C", "F", 3],
    ["D", "G", 2],
    ["D", "H", 1],
    ["D", "I", 2],
    ["E", "H", 1],
    ["E", "I", 3],
    ["F", "J", 1],
    ["F", "G", 1],
    ["G", "K", 2],
    ["G", "I", 3],
    ["H", "L", 2],
    ["H", "I", 1],
    ["I", "M", 3],
    ["J", "S", 2],
    ["K", "N", 1],
    ["K", "L", 3],
    ["L", "R", 1],
    ["L", "M", 1],
    ["M", "N", 2],
    ["M", "Q", 1],
    ["M", "S", 1],
    ["N", "P", 1],
    ["Q", "O", 1],
    ["O", "R", 3],
    ["P", "O", 1],
    ["R", "S", 1],
]

nums=[]

def dfs(num,r):
    for y in r_list:
        if y[0]==r[1]:
            num+=y[2]
            if y[1]=='S':
                nums.append(num)
            else:
                dfs(num,y)
for w in r_list:
    
    if w[0]=='A':
        dfs(w[2],w)
print(min(nums))

货物摆放 

小蓝有一个超大的仓库,可以摆放很多货物。

现在,小蓝有 nn 箱货物要摆放在仓库,每箱货物都是规则的正方体。小蓝规定了长、宽、高三个互相垂直的方向,每箱货物的边都必须严格平行于长、宽、高。

小蓝希望所有的货物最终摆成一个大的长方体。即在长、宽、高的方向上分别堆 L、W、H 的货物,满足n=L×W×H。

给定 nn,请问有多少种堆放货物的方案满足要求。

例如,当 n=4 时,有以下 6 种方案:1×1×4、1×2×2、1×4×1、2×1×2、2 × 2 × 1、4 × 1 × 11×1×4、1×2×2、1×4×1、2×1×2、2×2×1、4×1×1。

请问,当 n = 2021041820210418(注意有 16 位数字)时,总共有多少种方案?

思路

题目要我们找到满足n=L×W×H的方案有多少个,很自然的想到遍历所有数,找到符合条件的三个数的方法,但是这样花费时间太多,我们注意到L,W,H这三个数都可以整除n的数,所以我们先找到n的所有约数,然后在约数中即可

代码

n=2021041820210418
cnt=0

ans=[]
for i in range(1,int((n)**0.5+1)):
  if n%i==0 :
    ans.append(i)
    ans.append(n//i)

for i in ans:
    for j in ans:
      if (n/i)%j==0:
        cnt+=1
print(cnt)
  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晓宜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值