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

今日复习计划:做题

例题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,今天状态不好,这篇就这样了,下一篇继续!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

实现数组方法 forEach map filter every

手写forEach Array.prototype.myforEach function (fn, thisValue) {let index 0;let arr thisValue || this;if (typeof fn ! function) {throw new TypeError(fn is not a function)}while (index < arr.length) {if (index in arr) {fn.call (thisValue, arr[index],…

AI入门笔记(三)

神经网络是如何工作的 神经网络又是如何工作的呢&#xff1f;我们用一个例子来解释。我们看下面这张图片&#xff0c;我们要识别出这些图片都是0并不难&#xff0c;要怎么交给计算机&#xff0c;让计算机和我们得出同样的结果&#xff1f;难点就在于模式识别的答案不标准&…

Mybatis_plus-逻辑删除、通用枚举、自动填充、插件等

一、逻辑删除 曾经我们写的删除代码都是物理删除。 逻辑删除&#xff1a;删除转变为更新 ​ update user set deleted1 where id 1 and deleted0 查找: 追加 where 条件过滤掉已删除数据,如果使用 wrapper.entity 生成的 where 条件也会自动追加该字段 ​ 查找: select id,nam…

【NR 定位】3GPP NR Positioning 5G定位标准解读(五)

前言 3GPP NR Positioning 5G定位标准&#xff1a;3GPP TS 38.305 V18 3GPP 标准网址&#xff1a;Directory Listing /ftp/ 【NR 定位】3GPP NR Positioning 5G定位标准解读&#xff08;一&#xff09;-CSDN博客 【NR 定位】3GPP NR Positioning 5G定位标准解读&#xff08;…

扑克牌翻牌记忆小游戏源码

源码由HTMLCSSJS组成&#xff0c;双击html文件可以本地运行效果&#xff0c;也可以上传到服务器里面 效果预览 下载地址 https://www.qqmu.com/2296.html

Spring学习笔记(七)SpringMVC入门

一.什么是Spring MVC 1.什么是MVC&#xff08;一种思想模式&#xff09; M:模型 V:视图 C:控制器 2、Java EE三层架构 在Java EE开发中&#xff0c;系统经典的三层架构包括表现层、业务层和持久层。 表现层&#xff08;Web层&#xff09;负责接收客户端请求&#xff0c;并…

Linux基本指令(下)

目录 1. less指令 2. head与tail指令 3. find指令 示例 4. grep指令 示例 ​编辑 5. zip/unzip 打包与压缩 示例 ​编辑 6. tar指令 7. find指令&#xff1a; -name 8. echo指令 9. 时间相关的指令 1.在显示方面&#xff0c;使用者可以设定欲显示的格式&#xff…

更详细的软件测试理论基础:流程,开发、测试模型,测试分类,测试用例及其设计方法,缺陷

文章目录 一、测试流程二、开发模型1、 瀑布模型2、增量模型3、快速模型4、其他 三、测试模型1、V模型2、W模型 四、测试分类五、测试用例 test case六、测试用例设计方法1、等价类划分法2、边界值分析法3、因果图法4、判定表法5、正交法6、场景法7、流程分析法8、错误推测法方…

OpenAI回击马斯克的起诉:GPT-4不是AGI,所以没必要开源

前情提要 上一集我们讲到&#xff0c;马斯克起诉了OpenAI&#xff0c;扬言其背叛了公司成立时达成的一项协议&#xff0c;即开发技术的目的是“造福人类”而非利润。 “OpenAI已经变成了微软的一个闭源形态的实际子公司。在其新的董事会领导下&#xff0c;公司不仅在开发&…

FreeCad 有限元分析入门

2024.3 最新版本 0.21.2 FreeCad 有限元分析入门 基本步骤&#xff1a; 一、零件制作 1、创建立方体 2、修改参数 二、建立力学分析 1、为零件附着材料 2、增加固定约束 3、增加均布在表面的受力 4、零件网格化 …

Decoupled Knowledge Distillation解耦知识蒸馏

Decoupled Knowledge Distillation解耦知识蒸馏 现有的蒸馏方法主要是基于从中间层提取深层特征&#xff0c;而忽略了Logit蒸馏的重要性。为了给logit蒸馏研究提供一个新的视角&#xff0c;我们将经典的KD损失重新表述为两部分&#xff0c;即目标类知识蒸馏&#xff08;TCKD&a…

2024 年广东省职业院校技能大赛(高职组)“云计算应用”赛项样题 2

#需要资源或有问题的&#xff0c;可私博主&#xff01;&#xff01;&#xff01; #需要资源或有问题的&#xff0c;可私博主&#xff01;&#xff01;&#xff01; #需要资源或有问题的&#xff0c;可私博主&#xff01;&#xff01;&#xff01; 某企业根据自身业务需求&#…

第八节 龙晰Anolis 8.8 安装 DDE 桌面环境

一、前言 最小化安装的龙晰 Anolis OS 8.8 是不带图形化界面的&#xff0c;只能使用命令行&#xff0c;有些时候需要用到桌面环境&#xff0c;而DDE (Deepin Desktop Enviroment) 就是很好的桌面环境&#xff0c;它是指龙晰 Anolis 所搭载的中国自主桌面环境&#xff0c;用起来…

常数项级数

定义 级数的形式如下&#xff1a; ∑ n 1 ∞ u n u 1 u 2 u 3 . . . u n . . . \sum_{n1}^{\infin}u_n u_1u_2u_3...u_n... n1∑∞​un​u1​u2​u3​...un​... 这个数列的项数是无穷多个&#xff0c;如果取其前n项 S n u 1 u 2 . . . u n S_n u_1u_2...u_n Sn…

Java集合相关面试题(2024大厂高频面试题系列)

1、说一说Java提供的常见集合&#xff1f;&#xff08;画一下集合结构图&#xff09; 在java中提供了量大类的集合框架&#xff0c;主要分为两类&#xff1a; 第一个是Collection 属于单列集合&#xff0c;第二个是Map 属于双列集合 在Collection中有两个子接口List和Set。…

C#中多语言编程原理及实例解析

文章目录 一、了解C#多语言编程原理1. 通用语言运行库&#xff08;CLR&#xff09;2. 通用类型系统&#xff08;CTS&#xff09;3. 微软中间语言&#xff08;MSIL&#xff09;4. 元数据和反射5. 公共语言规范&#xff08;CLS&#xff09; 二、实例说明 一、了解C#多语言编程原理…

sql基本语法+实验实践

sql语法 注释&#xff1a; 单行 --注释内容# 注释内容多行 /* 注释内容 */数据定义语言DDL 查询所有数据库 show databases;注意是databases而不是database。 查询当前数据库 select database();创建数据库 create database [if not exists] 数据库名 [default charset 字符…

大话设计模式——4.装饰模式(Decorator Pattern)

1.定义 1&#xff09;可以在不改动原有对象代码的情况下扩展对象的功能&#xff0c;通过聚合的方式相较于继承更加灵活。 2&#xff09;UML图 2.示例 汽车有很多装饰可选&#xff0c;如座椅、音响、轮胎等都可以进行自定义组装 1&#xff09;抽象汽车对象 public interfac…

【yolov8部署实战】VS2019环境下使用Onnxruntime环境部署yolov8目标检测|含源码

一、前言 部署yolo项目&#xff0c;是我这几个月以来做的事情&#xff0c;最近打算把这几个月试过的方法&#xff0c;踩过的坑&#xff0c;以博客的形式&#xff0c;分享一下。关于下面动态中讲到的如何用opencv部署&#xff0c;我在上一篇博客中已经详细讲到了&#xff1a;【…

项目-论坛系统

基于Spring前后端分离版本的论坛系统。 1、构建项目结构 common公共类&#xff1a;统一返回结果、全局变量、异常枚举信息config配置类&#xff1a;Swagger&#xff0c;用于自动生成CRUD和基本对象controller控制器类&#xff1a;用于接受前端信息和控制路由dao数据库访问类&…