python 基础知识点(蓝桥杯python科目个人复习计划57)

news2024/11/15 8:46:54

今日复习计划:做题

例题1:笨笨的机器人

问题描述:

肖恩有一个机器人,他能根据输入的指令移动相应的距离。但是这个机器人很笨,他永远分不清往左边还是往右边移动。肖恩也知道这一点,所以他设定这个机器人不管向哪边只要走出7步就会自动回到原点(如果不这样设定机器人就有可能跑到肖恩找不到的地方)。请你计算肖恩给机器人一串指令后,机器人能回到肖恩面前的概率(机器人初始时在肖恩面前)。

输入描述:
第一行输入一个n,表示肖恩一次输入n条指令;

第二行输入n个整数,a[i]表示肖恩输入的第i条指令。

数据保证:1 <= n <= 15,0 <= a[i] <= 1000

输出描述:

输出一个浮点数表示机器人回到肖恩面前的概率。浮点数四舍五入后保留小数点后4位小数。

参考答案:

def get():
    cnt = 0
    for i in range(1<<n):
        ans = 0
        for j in range(n):
            if (i >> j & 1 == 1):
                ans += li[j]
            else:
                ans -= li[j]
        if ans % 7 == 0:
            cnt += 1
    return cnt
n = int(input())
tot = 2**n
li = list(map(int,input().split()))
cnt = get()
print('{:.4f}'.format(cnt / tot + 0.0000001))

运行结果:

以下是我对此题的理解:

这道题目可以通过暴力枚举的方式来解决。我们可以枚举所有可能的指令组合,并计算每个组合下机器人能否回到原点。然后,统计满足条件的组合数量,并计算其概率。

思路解析:

1.枚举所有可能的指令组合

使用位运算可以方便地枚举所有可能的指令组合。假设肖恩输入了n条指令,那么一共有2^n种指令组合,即1 << n;

2.计算每个组合下机器人是否能够回到原点

遍历每个指令组合,根据指令的正负确定机器人的移动方向,并累加移动的距离。然后判断移动的距离能否整除7,如果能,则表示机器人可以回到原点。

3.统计满足条件的组合数量

统计满足条件的组合数量,即机器人能够回到原点的组合数量。

4.计算概率

将满足条件的组合数量除以总的指令组合数量,得到机器人回到原点的概率。

接下来是我的代码解释:

def get():定义了一个函数get,用来统计满足条件的组合数

cnt = 0:初始化满足条件的组合数量为0

for i in range(1<<n):通过位运算枚举所有可能出现的组合

ans = 0:初始化移动的距离为0

for j in range(n):遍历每个指令

if(i >> j & 1 == 1):检查当前指令是否在指令组合中

如果是,则将指令对应的距离加到ans中,否则,就减去。

if ans % 7 == 0:检查ans是否为7的倍数

如果是,则说明机器人能回到原点,将满足条件的组合数加一

return cnt:返回满足条件的组合数量

n = int(input()):输入肖恩一次输入的指令数量

tot = 2 ** n:计算总的组合数量

li = list(map(int,input().split())):输入肖恩所输入的指令列表

cnt = get():调用get函数统计满足条件的组合数量

print('{:.4f}'.format(cnt / tot + 0.0000001)):计算最后答案。加上0.0000001是为了避免除法运算时可能出现的精度损失导致的错误舍入。


例题2:迷失之数

问题描述:

肖恩是一名冒险家,他听说在一座神秘的迷宫中隐藏着巨大的宝藏,迷宫中有一个特殊的房间,房间里有一行数字序列A,被称之为”迷失之数“,传说有着神秘的力量。

据传言,只有将这些数字重新排列,才能找到通往宝藏的路径。肖恩发现,通过重排这个数字序列,使得重排后的序列的前缀或和数组B的字典序最大,就能够触发隐藏在迷宫深处的传送门,进入宝藏所在的禁地。

肖恩希望能够成功解开这个谜题,以获得宝藏的荣誉和财富。他需要利用自己的智慧和洞察力,找到最佳的数字排列方式。现在,你能帮助肖恩找到正确的序列,找到通往宝藏的序列吗?

前缀或和:B[i] = a[1] or a[2] or a[3] or... or a[i - 1] or a[i]称B[i]为A的前缀1到i的前缀或和。

输入描述:

第一行输入一个n,表示数字序列A的长度;

第二行输入n个数字,第i个数字A[i]表示序列的第i个数字。

数据保证:1 <= n <= 10^6,1 <= A[i] <= 10^9。

输出描述:

输出n个数字,表示前缀或和字典序最大的序列。

若字典序相同时,保持原数组输入顺序不变,即若ai和aj(i < j)在某一位置能得到相同字典序的序列时,保持ai在aj之前。

参考答案:

n = int(input())
A = list(map(int,input().split()))
B = [max(A)]
V = max(A)
A.remove(max(A))
for _ in range(30):
    tmp,ind = -1,-1
    for i in range(len(A)):
        if tmp < ((V|A[i]) - V):
            tmp = ((V|A[i]) - V)
            ind = i
    if ind == -1:
        break
    B.append(A[ind])
    V|=A[ind]
    A.remove(A[ind])
print(*A,*B)

运行结果:

以下是我对此题的理解:

一行一行写太麻烦了,我用注释的形式表示出来:

n = int(input())  # 输入数字序列 A 的长度
A = list(map(int,input().split()))  # 输入数字序列 A

B = [max(A)]  # 初始化一个数组 B,初始值为 A 中的最大值,表示序列的第一个数字
V = max(A)  # 使用变量 V 来记录当前已经形成的前缀或和

A.remove(max(A))  # 从 A 中移除最大值,因为最大值已经添加到 B 中

# 循环 30 次,这里选择 30 次是因为题目中限定了数字范围为 1 到 10^9,而 2^30 = 1073741824 大于 10^9
for _ in range(30):
  tmp, ind = -1, -1  # 初始化临时变量 tmp 和索引 ind,用于记录最大增加值和对应的索引

  # 遍历 A 中的数字,找到能够使得字典序最大的数字
  for i in range(len(A)):
    # 计算当前数字与 V 进行按位或操作后的增加值
    add_value = (V | A[i]) - V
    # 比较增加值是否大于临时变量 tmp,如果是则更新 tmp 和 ind
    if tmp < add_value:
      tmp = add_value
      ind = i
  
  # 如果找不到能够增加字典序的数字,则结束循环
  if ind == -1:
    break
  
  # 将找到的数字添加到 B 中,并更新 V
  B.append(A[ind])
  V |= A[ind]
  A.remove(A[ind])  # 从 A 中移除已经添加到 B 中的数字

# 输出新序列,保持原数组输入顺序
print(*A, *B)

好了,以上的注释就是我的思路。


OK,今天状态不好,这篇就这样了,下一篇继续!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1484048.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

红外电力设施检测数据集

需要的同学私信联系&#xff0c;推荐关注上面图片右下角的订阅号平台 自取下载。 红外检测技术目标检测准确、速度快、涵盖面积广&#xff0c;可以在不停电、不接触、不解体、不采样的状态下&#xff0c;对带电设备的状态进行检测和诊断&#xff0c;精确查找出设备的劣化程度、…

springboot+vue小区物业管理系统

摘 要 随着我国经济发展和城市开发&#xff0c;人们对住房的需求增大&#xff0c;物业管理也得到了发展。但是&#xff0c;基于人工的物业管理仍然是现阶段我国大部分物业管理公司的管理模式&#xff0c;这种管理模式存在管理人员效率低下、工作难度大的问题&#xff0c;同时…

SpringCloudAlibaba介绍

Spring Cloud Alibaba Spring Cloud Alibaba 是什么&#xff1f;微服务全景图核心特色 大家好&#xff0c;我叫阿明。下面我会为大家准备Spring Cloud Alibaba系列知识体系&#xff0c;结合实战输出案列&#xff0c;让大家一眼就能明白得技术原理&#xff0c;应用于各公司得各…

用冒泡排序模拟C语言中的内置快排函数qsort!

目录 ​编辑 1.回调函数的介绍 2. 回调函数实现转移表 3. 冒泡排序的实现 4. qsort的介绍和使用 5. qsort的模拟实现 6. 完结散花 悟已往之不谏&#xff0c;知来者犹可追 创作不易&#xff0c;宝子们&#xff01;如果这篇文章对你们有帮助的话&#xff0c;别忘了给个免…

Windows批处理:bat文件学习

目录 第一章、快速了解Windows批处理1.1&#xff09;Windows批处理相关概念介绍1.1.1&#xff09;批处理的起源1.1.2&#xff09;bat文件介绍 1.2&#xff09;Demo1.2.1&#xff09;创建文件添加命令1.2.2&#xff09;bat脚本中的命令解释 第二章、实例2.1&#xff09;点击bat文…

排序——手撕快排

本节复习快速排序&#xff0c; 快排我们要讲三个版本&#xff1a;一种是霍尔大佬的原版版本&#xff0c; 也就是快速排序的原版。 一种挖坑法。还有一种前后指针法。 首先我们应该知道&#xff0c;三个版本针对的是单趟进行排序的方法不同。 而多趟使用的是递归或者非递归模拟…

Carla自动驾驶仿真九:车辆变道路径规划

文章目录 前言一、关键函数二、完整代码效果 前言 本文介绍一种在carla中比较简单的变道路径规划方法&#xff0c;主要核心是调用carla的GlobalRoutePlanner模块和PID控制模块实现变道&#xff0c;大体的框架如下图所示。 一、关键函数 1、get_spawn_point(),该函数根据指定r…

360文件夹(窗口标签化工具)使用:windows系统的文件管理标签化

软件介绍 360 文件夹是一款单窗口多标签的资源管理器&#xff0c;提高了用户使用各类文件夹操作效率。单窗口多标签&#xff0c;像浏览器一样用多标签管理每个文件夹&#xff0c;以便更加快速高效地切换文件夹&#xff0c;告别凌乱的窗口&#xff0c;加快办公效率&#xff1b;…

剑指offer面试题28:对称的二叉树

#试题28&#xff1a;对称的二叉树 题目&#xff1a; 请设计一个函数判断一棵二叉树是否 轴对称 。 示例 1&#xff1a; 输入&#xff1a;root [6,7,7,8,9,9,8] 输出&#xff1a;true 解释&#xff1a;从图中可看出树是轴对称的。示例 2&#xff1a; 输入&#xff1a;root …

ssm个人学习01

Spring配置文件: spring环境的搭建: 1:导入对应的spring坐标 也就是依赖 2:编写controller, service, dao相关的代码 3:创建配置文件(在resource下面配置文件) 例如:applicationContext.xml <bean id "" class ""> <property name "&…

SQL窗口函数, 测试题

第一题 create table user_score (logday date, -- 考试时间 userid VARCHAR(20), -- 考试用户 score int); -- 考试成绩Insert into user_score values (2019-10-20,11111,85) ,(2019-10-20,22222,83) ,(2019-10-20,33333,86) ,(2019-10-21,11111,87) ,(2019-10-2…

node 之 http模块

1.什么是http模块 在网络节点中&#xff0c;负责消费资源的电脑叫做客户端&#xff1b;负责对外提供网络资源的电脑&#xff0c;叫做服务器 http模块是node.js官方提供的&#xff0c;用来创建web服务器的模块&#xff0c;通过http模块提供的http.createServer()方法&#xff0c…

烧脑问题解决办法:如何选择一款合适自己的手机流量卡

现在社会人们越来越离不开手机了&#xff0c;手机给我们生活带来了翻天覆地的变化&#xff0c;手机需要最多的就是流量了&#xff0c;所以选择一款合适自己的手机流量卡就显得尤为重要了&#xff0c;今天小编就给大家来分享一下我的经验&#xff0c;希望对大家能有帮助&#xf…

构建大语言模型的四个主要阶段

大规模语言模型的发展历程虽然只有短短不到五年的时间&#xff0c;但是发展速度相当惊人&#xff0c;国内外有超过百种大模型相继发布。中国人民大学赵鑫教授团队在文献按照时间线给出 2019 年至 2023 年比较有影响力并且模型参数量超过 100 亿的大规模语言模型。大规模语言模型…

关于synchronized介绍

synchronized的特性 1. 乐观锁/悲观锁自适应,开始时是乐观锁,如果锁冲突频繁,就转换为悲观锁 2.轻量级/重量级锁自适应 开始是轻量级锁实现,如果锁被持有的时间较长,就转换成重量级锁 3.自旋/挂起等待锁自适应 4.不是读写锁 5.非公平锁 6,可重入锁 synchronized的使用 1&#…

01背包(详细)

背包最大重量为4。 有物品3件&#xff0c;分别有其质量和价值。 vector<int> weight{1,3,4}; vector<int> value{15,20,30}; int bag4; 问背包能背的物品最大价值是多少&#xff1f; 这是标准的动态规划问题&#xff0c;每一个问题鱼鳍前面的子问题相联。 目…

structuredClone() 详解

您是否知道&#xff0c;现在 JavaScript 中有一种原生的方式可以深拷贝对象&#xff1f; 没错&#xff0c;这个内置于 JavaScript 运行时的structuredClone函数就是这样&#xff1a; const calendarEvent {title: "Builder.io大会",date: new Date(123),attendees…

#WEB前端(CSS基础)

1.实验&#xff1a;HTML是网页骨架&#xff0c;CCS是网页装修 2.IDE&#xff1a;VSCODE 3.记录&#xff1a; style 4.代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"view…

Ajax(黑马学习笔记)

Ajax介绍 Ajax概述 我们前端页面中的数据&#xff0c;如下图所示的表格中的学生信息&#xff0c;应该来自于后台&#xff0c;那么我们的后台和前端是互不影响的2个程序&#xff0c;那么我们前端应该如何从后台获取数据呢&#xff1f;因为是2个程序&#xff0c;所以必须涉及到…

风电机组来说,CMS振动数据和SCADA数据各有其优点和缺点

对于风电机组来说&#xff0c;CMS振动数据和SCADA数据各有其优点和缺点。 CMS振动数据的缺点主要包括&#xff1a; 数据解读难度高&#xff1a;振动数据包含大量的专业信息&#xff0c;如振动幅度、频率、相位等&#xff0c;需要专业的知识和技能才能准确解读。受环境影响大&…