蓝桥杯真题day2

题目1:小平方

小蓝发现,对于一个正整数 n 和一个小于 n 的正整数 v,将 v 平方后对 n 取余可能小于 n 的一半,也可能大于等于 n 的一半。

请问,在 1 到 n-1 中, 有多少个数平方后除以 n 的余数小于 n 的一半。

例如,当 n=4 时,1,2,3的平方除以 4 的余数都小于 4 的一半。

又如,当 n=5 时, 1,4 的平方除以 5 的余数都是 1,小于 5 的一半。而 2,3 的平方除以 5 的余数都是 4, 大于等于 5 的一半。

思路:根据题意直接模拟就好了

代码:

# 输入一个整数,表示n
n = int(input())
ans = 0
#遍历从(0,n-1)
for i in range(1,n):
    if i**2%n<(n/2):
        ans+=1
print(ans)

思考与反省:这里注意要求的是余数小于n的一半,不要使用//(是整除的意思)

题目2:小明决定从下周一开始努力刷题准备蓝桥杯竞赛。他计划周一至周五每天做 a 道题目,周六和周日每天做 b 道题目。请你帮小明计算,按照计划他将在第几天实现做题数大于等于 n 题?

思路:这里不要用枚举法,可能会运行时间过长。这里先计算一周需要做了多少题目,再计算n(天数)➗7有多少周,这里仅需要考虑,天数不足七天的时候怎么办

代码:

a, b, n = map(int, input().split())
total_week = 5*a + 2*b
full_weeks = n // total_week
days = full_weeks * 7
completed = full_weeks * total_week
if completed < n:
    for i in range(1,8):
        if i <= 5:
            completed += a
        else:
            completed += b
        days += 1
        if completed >= n:
            break
print(days)


反思与思考:这里仅仅需要考虑➗7之后多出来的天数和少于7天时候,需要的判断条件

题目3:解码

小明有一串很长的英文字母,可能包含大写和小写。

在这串字母中,有很多连续的是重复的。小明想了一个办法将这串字母表达得更短:将连续的几个相同字母写成字母 + 出现次数的形式。 例如,连续的 55 个 a,即 aaaaa,小明可以简写成 a5(也可能简写成 a4aaa3a 等)。

对于这个例子:HHHellllloo,小明可以简写成 H3el5o2。为了方便表达,小明不会将连续的超过9个相同的字符写成简写的形式。

现在给出简写后的字符串,请帮助小明还原成原来的串。

思路:如题,这里遍历字符串,判断是否是数字,如果是数字就重复字母n次。首先我们初始化一个i,然后判断是否是字母,如果是字母就判断下一个位置是否是数字,如果是就重复这个字母n遍,并且i+2,这里跳过了这个数字;如果下个位置是字母,就i+=1,最后通过‘’.join(res)将字符拼接成字符串

代码:

m = str(input())
res = []

i = 0
while i < len(m):#遍历输入字符串
    if m[i].isalpha():#如果当前字符是字母
        if i + 1 < len(m) and m[i + 1].isdigit():#检查下一个字符是否是数字
            res.append(m[i]*int(m[i + 1]))#重复字母n次
            i += 2#跳过数字
        else:
            res.append(m[i])
            i += 1
result = ''.join(res)
print(result)

题目四:成绩分析

题目描述

小蓝给学生们组织了一场考试,卷面总分为 100 分,每个学生的得分都是一个 0 到 100 的整数。请计算这次考试的最高分、最低分和平均分。

输入格式

输入的第一行包含一个整数 n,表示考试人数。

接下来 n 行,每行包含一个 00 至 100100 的整数,表示一个学生的得分。

输出格式

输出三行。

第一行包含一个整数,表示最高分。

第二行包含一个整数,表示最低分。

第三行包含一个实数,四舍五入保留正好两位小数,表示平均分。

思路:这个很简单,需要注意的是,输入和输出的格式,在这里我没注意到,导致我这道题做了五六分钟,反应过来的时候感觉自己太呆了hhhh。

代码:

n=int(input())
res=[]
for i in range(n):
    m=int(input())
    res.append(m)
aver_nums = round(sum(res) / len(res),2)  # 计算平均值
res.sort()  # 排序列表
print(res[-1])
print(res[0])
print(aver_nums)

思考与反思:这里的四舍五入保留两位小数的函数是round(number,2),其中number是参数,2是需要保留的几位小数。因为我是python用户所以在对分数进行排序时偷懒了,没有用排序的几个算法,如果有其他的编程语言用户看到这个博客,还是要去自己写一遍排序的算法。

题目5:大写

给定一个只包含大写字母和小写字母的字符串,请将其中所有的小写字母转换成大写字母后将字符串输出。

输入格式

输入一行包含一个字符串。

输出格式

输出转换成大写后的字符串。

思路:这题思路很清晰,只需要清楚大小写转换只差32就行。

代码

word = input()
res = []
for i in word:
    if ord(i) - ord('a') >= 0 and ord(i) - ord('z') <= 0:
        res.append(chr(ord(i)-32))
    else:
        res.append(i)
result = ''.join(res)
print(result)

思考与反省:chr函数是与ord作用相反的一个函数,这里记住是chr而不是char,我这里之前写的时候停顿了一下。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值