当前位置: 首页 > news >正文

蓝桥杯简单题练习

1.如果把上线换为20万元,分成的份数乘5,应该就是份数最多的情况。同时,这20万元不可有重复。但我实际操作时发现这种方法不可取。因为无法做到不重复满足20万元刚好成立的情况。

但我发现在用电脑自带的计算器计算时,最多到8,就会超出100万元的界限,所以我们可以硬算出来答案,只需要设计最多8个系数。

所以我们可以直接暴力:

count=0
list1=[]
max=0
for i1 in range(0,6):
    for i2 in range(0, 6):
        for i3 in range(0, 6):
            for i4 in range(0, 6):
                for i5 in range(0, 6):
                    for i6 in range(0, 6):
                        for i7 in range(0, 6):
                            for i8 in range(0, 6):
                                if i1*1+i2*7+i3*(7**2)+i4*(7**3)+i5*(7**4)+i6*(7**5)+i7*(7**6)+i8*(7**7)==1000000:
                                    count=i1+i2+i3+i4+i5+i6+i7+i8
                                    list1.append(count)
                                    if count>max:
                                        max = count
                                

print(max)


我看了题解,有大佬提出:将100万转化为7进制,刚好一一对应,这里不要被最大值迷惑了,进制转化结果唯一。至于为什么不会出现第六份,我也不太清楚。

# 解题思路:将100万转换为7进制数,数位之位即份数
total_amount = 1000000
sum_of_digits = 0
while total_amount > 0:
    remainder = total_amount % 7
    total_amount = total_amount // 7
    sum_of_digits += remainder
print(sum_of_digits)

2.

最先开始没有想起ord(),于是排列字母数出来的。在考场上面忘记字母排序也不要紧,打开EXCEL表格,竖列是字母排序。

ord() 函数是 chr() 函数(对于8位的ASCII字符串)或 unichr() 函数(对于Unicode对象)的配对函数,它以一个字符(长度为1的字符串)作为参数,返回对应的 ASCII 数值,或者 Unicode 数值,如果所给的 Unicode 字符超出了你的 Python 定义范围,则会引发一个 TypeError 的异常。

chr() 用一个范围在 range(256)内的(就是0~255)整数作参数,返回一个对应的字符。

print (chr(0x30), chr(0x31), chr(0x61) )  # 十六进制
#0 1 a
print (chr(48), chr(49), chr(97)  )       # 十进制
#0 1 a

print(4+19+21*20)

 这里外围4刀,行数19刀,边缘21*20,加起来即可。刚开始我用列算的,中间加的21刀,我想这样边缘数会少一点,但其实边缘数没有差别,先开行还是列不影响边缘数的值,所以第二次裁行。这里也可以找规律,440-1+4,算出来也是一样的。

3.

 

n=int(input())
a=list(map(int,input().split()))
cnt={}
for i in range(n):
    if a[i] not in cnt:
        cnt[a[i]]=0
    cnt[a[i]]+=1
c1=0;c2=0
for k,v in cnt.items():
    if v>2:
        c2+=(v-2)
    if v==1:
        c1+=1
if c2>=c1:
    print(c2)
else:
    print(c2+(c1-c2)//2)

我没写出这道题,看的题解。

  • for k, v in cnt.items():
        if v > 2:
            c2 += (v - 2)
        if v == 1:
            c1 += 1
    这段代码遍历列表 a,统计每个 id 的出现次数,并存储在字典 cnt 中。
    • 如果 a[i] 不在 cnt 中,则将其初始化为 0。
    • 然后,将 a[i] 的计数加 1。
  • for k, v in cnt.items():
        if v > 2:
            c2 += (v - 2)
        if v == 1:
            c1 += 1
    初始化两个计数器 c1 和 c2
    • c1 用于统计出现次数为 1 的 id 数量(即完全未配对的 id)。
    • c2 用于统计出现次数超过 2 的 id 的“多余”次数(即 v-2,表示超出两个配对所需的部分)。
  • if c2 >= c1:
        print(c2)
    else:
        print(c2 + (c1 - c2) // 2)
    
    遍历字典 cnt 的键值对。
    • 如果某个 id 的出现次数 v 大于 2,则将其“多余”次数(v-2)加到 c2 上。
    • 如果某个 id 的出现次数 v 等于 1,则将 c1 加 1。
  • if c2 >= c1:
        print(c2)
    else:
        print(c2 + (c1 - c2) // 2)
    
    如果 c2 大于或等于 c1,则输出 c2。这意味着如果有足够的“多余” id 来配对所有未配对的 id,则不需要额外的更改(但这里的逻辑并不完全正确,因为 c2 的计算方式并不能直接用于配对未配对的 id)。
  • 否则,输出 c2 + (c1 - c2) // 2。这部分试图处理当“多余” id 不足以配对所有未配对的 id 时的情况。

 

 之前一直不成功,后来发现是输入里有空格没去,所以造成等于空格的情况出现。这个代码在我自己检测时可以正常出结果,但是没有通过蓝桥的测试。难道是因为超时吗?检测时显示解题耗时818分钟。这确实太长了。

我发现在某个数出现超过1的奇数次时会出现问题,所以这个代码在结构上有问题。

这是我第一次的代码,好像在列表删除某个数之后,其他位置也会发生变化,所以出现错误 

5

这道题很简单,两个握手次数相减即可。

n= int(input())
count=0

def count1(n):
    position = 1  # 从个位开始,个位是奇数位(1-based index for explanation)
    while n > 0:
        digit = n % 10
        if position % 2 == 1:  # 奇数位
            if digit % 2 == 0:  # 奇数位上的数字应该是奇数
                return False
        else:  # 偶数位
            if digit % 2 != 0:  # 偶数位上的数字应该是偶数
                return False
        n//= 10
        position += 1
    return True
for i in range(1,n+1):
    if count1(i):
        count+=1
print(count)

 

  • 使用 position 变量来跟踪当前位是奇数位还是偶数位(从个位开始,个位视为奇数位)。
  • 逐位检查数字,如果奇数位上的数字不是奇数,或者偶数位上的数字不是偶数,则返回 False
  • 如果所有位都满足条件,则返回 True

这道题我刚开始想暴力

但我突然发现在位数不足,高位为0时这个式字不成立。

题解也有简单的解决方案:

import os
import sys
n = int(input())
m = 0 #计数
for i in range(1, n + 1):#检索所有的数,因为从1开始,所以循环这么写,不懂的补一补
    #i自身循环判断是否符合要求,一直除以10向下取整,最后就会为零
    while i > 0: 
        if i % 2 != 0: #判断个位奇偶
            i = i // 10 #向下取整就到十位了
        else:
            break #不符合要求结束循环i最终没有到达0
        if i % 2 == 0: #判断十位
            i = i // 10 #除以10
        else:
            break
    if i == 0:#符合题目要求的i最后都会为零,我们就计1个数
        m += 1
print(m)

# 请在此输入您的代码

相关文章:

  • win11 redis3.0下载和运行
  • 力扣面试150题--有效的数独
  • 【Android】Android 打包 Release 崩溃问题全解析:Lint 错误、混淆类丢失及解决方法大全
  • React 条件渲染
  • Agent2Agent协议学习资源大全:从理论到实践
  • 【Linux】单例模式及其在线程池中的应用
  • Spring Boot 集成 POI
  • 【Deepseek基础篇】--v3基本架构
  • 【SLAM】将realsense-viewer录制的rosbag视频导出成图片序列(RealSense D435)
  • 二分算法的入门笔记
  • Linuix基础11
  • Python:开启自动化办公与游戏开发的无限可能
  • mybatis plus 分页查询出来数据后对他二次 修改数据 封装返回
  • JAVA EE_多线程-初阶(三)
  • 驱动开发硬核特训 · Day 6 : 深入解析设备模型的数据流与匹配机制 —— 以 i.MX8M 与树莓派为例的实战对比
  • 第十六届蓝桥杯大赛软件赛省赛 Python 大学 B 组 部分题解
  • 辛格迪客户案例 | 西藏奇正藏药MES项目
  • 【Docker基础】深入解析 Docker 存储卷:管理、绑定与实战应用
  • 安宝特新闻丨Vuzix Core™波导助力AR,视角可调、高效传输,优化开发流程
  • echarts地图添加涟漪波纹点位
  • 石家庄人力资源和社会保障局/二十条优化疫情措施
  • 专业独立门户网站建设/市场调研数据网站
  • 义乌 网站 制作/360推广
  • 网站如何做播放线路/深圳seo公司
  • 网站防劫持怎么做/企业宣传册
  • 哪些网站做的比较好看/苏州新闻今天最新消息新闻事件