第十四届蓝桥杯Python组备赛随机刷题

前言

1、浮点数

问题描述
IEEE 754 规定一个双精度浮点数百 1 位符号位、11 位阶和 52 位尾数组成 (以上位数都表示二进制位数)。

请问,按此规定一个双精度浮点数占用几个字节?
此题考查计算机基础知识,1字节==8位二进制
64/8=8,直接print(8)

2、日期格式

问题描述
小蓝要处理非常多的数据, 其中有一些数据是日期。

在小蓝处理的日期中有两种常用的形式: 英文形式和数字形式。

英文形式采用每个月的英文的前三个字母作为月份标识, 后面跟两位数字表示日期, 月份标识第一个字母大写, 后两个字母小写, 日期小于 10 时要补前导 0

1 月到 12 月英文的前三个字母分别是 Jan、Feb、Mar、Apr、May、 Jun、Jul、Aug、Sep、Oct、Nov、Dec:

数字形式直接用两个整数表达, 中间用一个空格分隔, 两个整数都不写前导 0。其中月份用 1 至 12 分别表示 1 月到 12 月。

样例输入
2 8
样例输出
Feb08

import os
import sys
m,d =input().split()
months=['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec']
if len(d)==1:
  d='0'+d
print(months[int(m)-1]+d)

这题用Python解真的简单,定义一个数组,记得下标从0开始,天数就做一个简单if语句判断

3、3 的倍数

在这里插入图片描述

import os
import sys
a=eval(input())
b=eval(input())
c=eval(input())
s1=a+b
s2=b+c
s3=a+c
if s1%3==0 or s2%3==0 or s3%3==0:
    print("yes")
else:
    print("no")

我猜有人会问为啥不把三个加一起,仔细审题,题目说的是“现在他手头有三个不同的数a,b,c, 他想知道, 这三个数中是不是有两个数的和是 3 的倍数。”

4、数青蛙

问题描述
“一只青蛙一张嘴, 两只眼睛四条腿。两只青蛙两张嘴, 四只眼睛八条腿。 三只青蛙三张嘴, 六只眼睛十二条腿。 ⋯⋯ 二十只青蛙二卜张嘴, 四十只眼睛八 十条腿。"

请问上面这段文字, 如果完全不省略, 全部写出来, 从 1 到 20 只青蛙, 总共有多少个汉字。

约定: 数字 2 单独出现读成 “两”, 在其他数里面读成 “二”, 例如 “十二”。 10 读作 “十”, 11 读作 “十一”, 22 读作 “二十二”。

请只计算汉字的个数, 标点符号不计算。

import os
import sys
def f(x):
    if x<=10:
        return 1
    if x<=20 or x%10==0:
        return 2
    else:
        return 3
sum=0
for x in range(1,21):
    sum+=(f(x)+f(x)+f(2*x)+f(4*x))
print(sum+10*20)

这题我想的是先把固定句式算上,在通过递归,找出基本关系,一只青蛙一张嘴,两个眼睛四条腿。
1:1:2:4
然后带入函数分别判断数量。

5、双阶乘

问题描述
一个正整数的双阶乘, 表示不超过这个正整数且与它有相同奇偶性的所有正整数乘积。
n 的双阶乘用 n!! 表示。

例如:
3!!=3×1=3
8!!=8×6×4×2=384
11!!=11×9×7×5×3×1=10395

请问, 2021!! 的最后 5 位 (这里指十进制位) 是多少?

注意: 2021!!=2021×2019×⋯×5×3×1 。

提示: 建议使用计算机编程解决问题。

import os
import sys
sum=1
for i in range(1,2022,2):
    sum*=i
print(sum%100000)

这题我先试了下递归,超出limit了…
上网查最大递归层数是1000左右,确实超了

6、乘法表

问题描述
九九乘法表是学习乘法时必须要掌握的。在不同进制数下,需要不同的乘法表。 例如,四进制下的乘法表如下所示:

1*1=1
2*1=2 2*2=10
3*1=3 3*2=12 3*3=21

请注意,乘法表中两个数相乘的顺序必须为样例中所示的顺序,不能随意交换两个乘数。

给定 P,请输出 P 进制下的乘法表。

import os
import sys
n=eval(input())
b="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
for i in range(1,n):
    for j in range(1,i+1):
        if (i*j//n)==0:
            print(f"{b[i]}*{b[j]}={b[(i*j)%n]}",end=" ")
        else:
            print(f"{b[i]}*{b[j]}={b[(i*j)//n]+b[(i*j)%n]}",end=" ")
# 解释一下else:因为乘法表最大的一个等式结果也小于n*n,所以两位数字一定能表示出所有的结果
    print()

是的,这题我也没做出来,整体思想是,如果两者乘积小于进制,不管;
乘积大于进制涉及到进位,通过巧用’//‘和’%';
在Python中,前者代表取整,后者代表取余。

7、Fibonacci集合

问题描述

小蓝定义了一个 Fibonacci 集合 F, 集合的元素如下定义:

  1. 最小的 5 个 Fibonacci 数 1,2,3,5,8 属于集合 F 。
  2. 如果一个元素 x 属于 F, 则3x+2、5x+3 和 8x+5 都属于集合 F 。
  3. 其他元素都不而于 F 。

请问,这个集合中的第 2020 小元素的值是多少?

import os
import sys
f=[1,2,3,5,8] #list
for i in range(20000):
    if i in f:
        f.append(3*i+2) #在列表尾部添加元素
        f.append(5 * i + 3)
        f.append(8 * i + 5)
print(sorted( #排序
        list( #集合转换为列表
        set(f)))[2019]) #集合去重

此题不要想那么多,直接暴力破解,他要第2020小的元素,直接把前两万输进去,至于担心不符合题目的,看循环中的if语句,集合内进行append添加,输出时,集合自动去重,在转换为列表进行排序。

好啦今天就写到这了,祝各位2023心想事成,祝愿互联网行业苦尽甘来。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Chowley

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

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

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

打赏作者

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

抵扣说明:

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

余额充值