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

今日复习内容:做题

例题1:最小的或运算

问题描述:给定整数a,b,求最小的整数x,满足a|x = b|x,其中|表示或运算。

输入格式:

第一行包括两个正整数a,b;

输出格式:

输出共1行,包含一个整数,表示最终答案。

参考答案:

a,b = map(int,input().split())
print(a^b)

运行结果: 

以下是我对此题的理解:

1.因为题目要求找到一个最小的整数x,使得a|x = b|x,其中|x表示a和b的二进制形式对应位进行或运算;

2.从最高位开始比较,如果a和b在该位上的值相同(即都为0或都为1),那么x在该位上可以取任意值,不影响最终结果。因此,我们可以直接将该位的添加到结果x中。

3.如果在某一位上a和b的值不同(即一个为1,一个为0),那么为了使得a|x = b|x,我们需要将x在该位上的值设为1,因为1与任何数进行或运算都得到1。

4.最终,得到的x就是满足条件的最小整数

这种做法基于按位异或运算(^)的定义如下:

如果两个对应的二进制位相同,则结果为0;

如果两个对应的二进制位不同,则结果为1。

根据这个定义,当a和b的某一位不同时,按位异或的结果为1,这意味着在结果x的对应位上必须为1,否则无法满足条件。而当a,b的某一位相同时,按位异或的结果为0,这意味着在结果x的对应位上可以时0或1,都不影响最终结果。

因此用这个方法,可以得出答案。


例题2:简单的异或难题

问题描述:

最近蓝桥A梦喜欢上了或运算,特别是沉迷于异或运算。

异或运算的特殊之处在于,进行异或运算的两个数a和b,,对于它们在二进制下的同一位,只有两边数不相同,运算的结果才为1,如果相同,则为0。比如1和3进行运算,它们转化成二进制后,分别为01和11,那么它们的异或运算结果就是10,转换成十进制后就是2。

异或运算实在是太有趣了,他这些天一直在进行异或运算,蓝桥美怕他走火入魔了,打算给蓝桥A梦出个难题 打击一下他的兴趣。

蓝桥美给了蓝桥A梦n个正整数ai,然后进行m次询问,每次询问在第l个数到第r个数之间,所有出现次数为奇数的数的异或和是多少。

对于3个数a,b,c,它们的异或和就是:

这种难题怎么会难倒蓝桥A梦呢?他并不想回答这么简单的问题,所以他把问题扔给了你,你能解决吗?

输入格式:

第一行包括两个正整数n和m(1 <= n,m <= 1 * 10^5),表示数组的长度和询问的次数。

第二行包含n个正整数ai(1 <= ai <= 10^5),ai表示第i个位置上的数字是ai。

接下来m行,每行包含两个正整数l和r(1<= l,r <= n),表示当前询问的区间。

输出格式:

对于每一行询问,输出一个整数,为当前询问区间[l,r]的出现次数为奇数的数的异或和。

参考答案:

n,m = map(int,input().split())
a = list(map(int,input().split()))
pre = [0]
for i in range(n):
    pre.append(pre[-1]^a[i])
for i in range(m):
    l,r = map(int,input().split())
    print(pre[r]^pre[l - 1])

运行结果:

以下是我对此题的理解:

n,m = map(int,input().split())

a = list(map(int,input().split()))

首先,读取输入,包括正整数的个数n,查询次数m以及正整数序列a;

pre = [0]

for i in range(n):

pre.append(pre[-1] ^ a[i])

使用一个数组pre来存储前缀异或和,其中pre[i]表示前i个数的异或和,这里pre的作用是为了方便计算任意区间的异或和。

在这个循环中,计算每个位置的前缀异或和,pre[-1]表示前i个数的异或和,然后再异或上当前数a[i],得到前i + 1个数的异或和,依次类推。

接下来就是读取查询区间[l,r]。


例题3:出列

问题描述:

上体育课时,n个同学按顺序站成一排,初始时第i个位置的同学,编号为i(从1开始)。

老师下令:“单数同学出列!”然后序号为单数的同学出列,剩下的同学重新按位置开始排列,编号不变。

老师又下令:“单数同学出列!”新的单数位置的同学出列,剩下的同学继续重新按位置排列。

如此下去,最后只剩下一个人,他的编号是多少?

输入格式:

输入仅一行,包含一个整数n。

输出格式:

输出仅一行,包含一个整数,表示最后剩下的人的编号。

参考答案:

n = int(input())
bin_n = bin(n)[2:]
print(1 << (len(bin_n) - 1))

运行结果:

以下是我对此题的理解:

我刚开始想到的是数学归纳法:

首先观察一下题目,每次出列后,剩下的同学的编号会重新排列,但总是保持着奇数编号的同学被淘汰。当剩下的同学数量为奇数时,淘汰后剩下的同学编号从2开始重新编号。由此可以得出结论:之后剩下的同学编号一定是2的幂次方,因此,我们只需要找到,因此我们只需要找到小于等于n的最大的2的幂次方,就得到了答案。

首先,将输入的n转化为二进制字符字符串并去掉开头的‘0b’;

然后,通过len(bin_n) - 1计算二进制表示的n的位数;

最后,通过1 << (len(bin_n) - 1)得到最后的同学的编号,即为小于等于n的最大的2的幂次方;

bin(n)[2:]

将输入的n转化为二进制字符字符串并去掉开头的‘0b’

len(bin_n) - 1:计算二进制字符串的长度,即二进制的位数

1 << (len(bin_n) - 1):左移<<表示将1左移若干位,相当于乘以2的若干次方,这里左移的位数为二进制的位数减一,就是最后的那个学生的编号

然后,我就想到了另外一种方法:

n = int(input())

# 寻找小于等于n的最大的2的幂次方
last_student = 1
while last_student <= n:
  last_student *= 2

# 最后剩下的同学的编号即为小于等于n的最大的2的幂次方的一半
last_student //= 2

print(last_student)

 例题4:位移

问题描述:

在一个神奇的玩具世界中,有两个小朋友,小明和小红,他们喜欢玩数字游戏。一天,他们发现了一种神奇的数字变换能力,只需使用位移运算(<<和>>)就能将一个数字变成另一个数字。

小明和小红决定进行一场数字变换的挑战。他们选定了两个数字a和b,并尝试通过位移运算讲数字a变成数字b。他们非常兴奋,想知道是否存在一系列的位移操作可以实现这个目标。

他们开始思考,并设计了各种位移操作的组合,希望能够将数字a变成数字b。如果他们成功找到一种位移操作组合,则输出Yes,否则输出No。

现在,让我们来帮小明和小红来完成这个数字变换的挑战,看看他们能否成功通过数字变换讲数字a变成数字b。

右移和左移的运算规则为:逻辑左移,高位丢弃,低位补0;逻辑 右移,低位丢弃,高位补0。如0000100,逻辑左移一位为0001000,逻辑右移一位为0000010。(需着重注意左移高位的变化)

输入描述:

第一行输入一个整数t,表示有t组测试数据;

接下来又t行输入,每行包含两个数字a和b,a和b意义如题目所述。

数据保证1 <= t <= 10^6,0 <= a,b <= 10^9

输出描述:

对于每一组测试数据,输出Yes或No。

参考答案:

import sys
t = int(input())
for i in range(t):
    a,b = map(int,sys.stdin.readline().strip('\n').split())
    bin_b = bin(b)[2:].strip('0')
    bin_a = bin(a)[2:]
    if bin_b in bin_a:
        print('Yes')
    else:
        print('No')

运行结果:

 

以下是我对此题的理解:

这道题可以检查数字b的二进制表示是否是数字a的二进制表示的字符串的子串来解决。如果是,则说明存在一系列位移操作可以将数字a转换为数字b,否则不能。

以下是我的思路:

1.二进制表示的子串

当一个二进制数字b是另一个二进制数字a的子串时,意味着可以通过在数字a的二进制表示中通过位移操作来得到b,因为位移操作不会改变数字1和0的位置,只会改变它们的相对位置。

2.代码解析

首先输入测试用例的数量t;

然后通过一个循环处理每个测试用例,输入数字a和b;

接着,将a和b转化为二进制字符串;

然后检查数字b的二进制表示是否是数字a的二进制表示的字符串的字串;

如果是字串,则输出"Yes",说明存在一系列位移操作可以将a转换为b;

否则输出"No",说明不能通过位移操作将a转换为b。


OK,这篇就到这里,下一篇继续!

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

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

相关文章

Java项目layui分页中文乱码

【问题描述】这部分没改之前中文乱码。 【解决办法】在layui.js或者layui.all.js文件中替换共、页、条转换成Unicode码格式。 字符Unicode共&#x5171页&#x9875条&#x6761【完美解决】改完之后重新运行项目&#xff0c;浏览器F12缓存清除就好了&#xff0c;右键

递归回溯剪枝-括号生成

LCR 085. 括号生成 - 力扣&#xff08;LeetCode&#xff09; 一. 根据题意&#xff0c;分析出符合要求的括号组合需要满足以下两个条件&#xff1a; 1. 左括号数或者右括号数都不能超过 n&#xff1b; 2. 从最左侧开始的每一个子集&#xff0c;不可以出现右括号数大于左括号数&…

力扣1892 页面推荐Ⅱ

力扣1892&#xff0c;页面推荐Ⅱ&#xff0c;为一个社交媒体网站实施一个页面推荐系统。如果页面被user_id的 至少一个朋友喜欢 &#xff0c;而 不被user_id喜欢 &#xff0c;你的系统将 推荐 一个页面到user_id。 目录 题目描述 解题思路 完整代码 优化 题目描述 表&…

有道QAnything背后的故事---关于RAG的一点经验分享

近日&#xff0c;我们开源了有道自研的RAG&#xff08;Retrieval Augmented Generation) 引擎QAnything。该引擎允许用户上传PDF、图片、Word、Excel、PowerPoint等多种格式的文档&#xff0c;并实现类似于ChatGPT的互动问答功能&#xff0c;其中每个答案都能精确追溯到相应的文…

Kaggle竞赛之Titanic存活预测2

提高代码规范性&#xff0c;基于上一个 baseline 的提高 import pandas as pd from sklearn.preprocessing import LabelBinarizer from sklearn.preprocessing import StandardScaler from sklearn.model_selection import train_test_split#数据划分方法 from sklearn.ensem…

FL Studio选购指南:新手小白应该选择哪个版本FL Studio?

很多打算入手正版FL Studio的新手朋友都会纠结一个问题&#xff1a;哪个版本的FL Studio更适合我&#xff0c;到底应该入手哪一款FL Studio&#xff1f;本文会介绍每个版本之间的差异点&#xff0c;并带大家选择适合自己的FL Sudio版本。 FL Studio全版本 在选购前有一些小知识…

动态代理如何获取动态生成的代理类的class文件

JDK动态代理 在使用JDK动态代理&#xff0c;即reflect包下的Proxy类的newProxyInstance方法时&#xff0c;会在运行时&#xff0c;根据传进来的接口类型动态生成class字节码文件。这个字节码文件是在内存中动态获取的&#xff0c;程序结束就没有了&#xff0c;如何动态获取呢。…

创新之巅 健康之选 森歌集成灶智能水洗新揭秘

2024年2月27日&#xff0c;一场引领智能厨电风潮的盛会在杭州隆重召开。森歌集成灶以“勠力同心 共生共歌”为主题&#xff0c;成功举办了2024森歌智能厨电优秀经销商峰会。此次峰会上&#xff0c;森歌集成灶发布了令人瞩目的奥运冠军同款智能厨电新品——森歌鲸洗小灶Z60&…

paper-ai :搜索真实文献并生成引用真实文献的AI论文

paper-ai &#xff1a;搜索真实文献并生成引用真实文献的AI论文。 项目简介 使用真实文献最快速完成论文的方法 利用人工智能撰写论文 人工智能书写功能&#xff1a;点击 "AI 写作 "进行正常对话互动。人工智能将根据您的输入提供写作建议或回答问题。 寻找文献功能…

相纸尺寸和相纸分类解释

相纸分类 高光 高光相纸俗称光面相纸&#xff0c;适用一般的证件用照和生活照片&#xff0c;表面平滑光亮。 绒面 绒面相纸(也称哑光相纸或哑光相纸)&#xff0c;因为绒面革相纸的表面粗糙&#xff0c;所以绒面相纸的质地很好&#xff0c;表面有哑光感&#xff0c;没有反光…

ELK学习

ELK 一、ELK介绍 &#x1f604; “ELK”是三个开源项目的首字母缩写&#xff0c;这三个项目分别是&#xff1a;Elasticsearch、Logstash 和 Kibana。Elasticsearch 是一个搜索和分析引擎。Logstash 是服务器端数据处理管道&#xff0c;能够同时从多个来源采集数据&#xff0…

测试:腾讯云4核8G服务器支持多少人在线访问?

腾讯云4核8G服务器支持多少人在线访问&#xff1f;支持25人同时访问。实际上程序效率不同支持人数在线人数不同&#xff0c;公网带宽也是影响4核8G服务器并发数的一大因素&#xff0c;假设公网带宽太小&#xff0c;流量直接卡在入口&#xff0c;4核8G配置的CPU内存也会造成计算…

Heimdallr - 被动嗅探浏览器插件

Heimdallr - 被动嗅探浏览器插件 Heimdallr是一款致力于被动嗅探浏览器流量&#xff0c;提示高危资产指纹和蜜罐特征&#xff0c;并进行拦截告警的谷歌插件&#xff0c;还可以用于对浏览器特征追踪&#xff08;evercookie、webRTC、Canvas画布等&#xff09;的对抗。 项目由深…

《汇编语言》- 读书笔记 - 第15章-外中断

《汇编语言》- 读书笔记 - 第15章-外中断 15.1 接口芯片和端口15.2 外中断信息1. 可屏蔽中断&#xff08;Maskable Interrupt&#xff09;2. 不可屏蔽中断&#xff08;Non-Maskable Interrupt&#xff09;设计思想 15.3 PC 机键盘的处理过程1. 键盘输入2. 引发 9 号中断3. 执行…

在您的下一个项目中选择 Golang 和 Node.js 之间的抉择

作为一名软件开发者&#xff0c;我总是在寻找构建应用程序的最快、最高效的工具。在速度和处理复杂任务方面&#xff0c;我认为 Golang 和 Node.js 是顶尖技术。两者在性能方面都享有极高的声誉。但哪一个更快——Golang 还是 Node&#xff1f;我决定深入一些硬核基准测试&…

Java+SpringBoot+Vue:志愿服务的数字化之旅

✍✍计算机毕业编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java、…

LeetCode 刷题 [C++] 第226题.翻转二叉树

题目描述 给你一棵二叉树的根节点 root &#xff0c;翻转这棵二叉树&#xff0c;并返回其根节点。 题目分析 深度优先搜索&#xff08;DFS&#xff09;- 递归方式 对于二叉树的镜像问题&#xff0c;很容易想到的就是使用递归来解决&#xff0c;自底向上依次翻转每一个节点…

DataX及Datax-web杂记

&#x1f47d;个人博客&#xff1a;https://everspring.github.io/ &#x1f47d;公众号&#xff1a;爱历史的IT男 一. DataX调试 DataX之前调试不是很方便&#xff0c;要打包后才能调试。23年7月后一位叫"FuYouJ "的开源者提交了datax-example模块&#xff0c;就方…

蓝桥杯备战刷题two(自用)

1.杨辉三角形 #include<iostream> using namespace std; #define ll long long const int N2e510; int a[N]; //1 0 0 0 0 0 0 //1 1 0 0 0 0 0 //1 2 1 0 0 0 0 //1 3 3 1 0 0 0 //1 4 6 4 1 0 0 //1 5 10 10 5 1 //前缀和思想 //第一列全为1,第二列为从0开始递增1的序…

win安装卸载python3.13

一、安装 访问python官网&#xff1a;https://www.python.org/ 点击“Downloads” 点击“Windows” 找到自己要下载的版本和位数&#xff0c;比如我这个是3.13版本、64位的安装包 下载好了之后&#xff0c;双击安装包 勾选“Add python.exe to PATH”&#xff1a;把python环…