【Python/Java/C++三种语言】20天拿下华为OD笔试之【位运算】2023B-出错的或电路【欧弟算法】全网注释最详细分类最全的华为OD真题

文章目录

  • 题目描述与示例
    • 题目描述
    • 输入描述
    • 输出描述
    • 示例一
      • 输入
      • 输出
      • 说明
    • 示例二
      • 输入
      • 输出
      • 说明
  • 解题思路
  • 代码
    • Python
    • Java
    • C++
    • 时空复杂度
  • 华为OD算法/大厂面试高频题算法练习冲刺训练

题目描述与示例

题目描述

某生产门电路的厂商发现某一批次的或门电路不稳定,具体现象为计算两个二进制数的或操作时,第一个二进制数中某两个比特位会出现交换,交换的比特位置是随机的,但只交换这两个位,其他位不变。

很明显,这个交换可能会影响最终的或结果,也可能不会有影响。

为了评估影响和定位出错的根因,工程师需要研究在各种交换的可能下,最终的或结果发生改变的情况有多少种。

输入描述

第一行有一个正整数 N;其中 1 ≤ N ≤ 1000000

第二行有一个长为 N 的二进制数,表示与电路的第一个输入数,即会发生比特交换的输入数。

第三行有一个长为 N 的二进制数,表示与电路的第二个输入数。注意第二个输入数不会发生比特交换。

输出描述

输出只有一个整数,表示会影响或结果的交换方案个数。

示例一

输入

3
010
110

输出

1

说明

原本 010110 的或结果是 110,但第一个输入数可能会发生如下三种交换:

  1. 交换第 1 个比特和第 2 个比特,第一个输入数变为 100,计算结果为 110,计算结果不变
  2. 交换第 1 个比特和第 3 个比特,第一个输入数变为 010,计算结果为 110,计算结果不变
  3. 交换第 2 个比特和第 3 个比特,第一个输入数变为 001,计算结果为 111,计算结果改变

故只有一种交换会改变计算结果。

示例二

输入

6
011011
110110

输出

4

说明

原本 011011110110 的或结果是 111111,但第一个输入数发生如下比特交换会影响最终计算结果:

  1. 交换第 1 个比特和第 3 个比特,第一个输入数变为 110011,计算结果变为 110111
  2. 交换第 1 个比特和第 6 个比特,第一个输入数变为 111010,计算结果变为 111110
  3. 交换第 3 个比特和第 4 个比特,第一个输入数变为 010111,计算结果变为 110111
  4. 交换第 4 个比特和第 6 个比特,第一个输入数变为 011110,计算结果变为 111110

其他的交换都不会影响计算结果,故输出 4

解题思路

第一个二进制数我们记为num1,第二个二进制数我们记为num2,或运算的结果记为num_or。对num1所选取的两个位置记为ij

如果num1[i]num1[j]交换之后或运算的结果和之前的不一致,说明交换的两个位置必定满足以下条件:

  1. num1[i] != num1[j],即交换的两个数必须是一个0一个1,不能均为0或者均为1。因为如果num1[i] == num1[j],说明交换前后的num1是一致的,与num2进行位运算得到的结果的num_or自然也是一致的。
  2. num2[i]num2[j]不能均为1,即num2的对应位置,至少有存在10。因为如果存在num2[i] == num2[j] == 1,那么无论num1[i]num1[j]是什么内容,或运算的结果一定存在num_or[i] == num_or[j] == 1,不会因为num1[i]num1[j]的交换而改变。

简单来说:

  1. num1的两个位置必须是一个0和一个1
  2. num2的两个位置必须至少有一个0

因此,如果num_or在交换前后出现改变,那么只可能是以下三种情况。

num1的情况num2的情况num_or交换前num_or交换后
num1[i] = 1``num1[j] = 0num2[i] = 0``num2[j] = 0num1[i] = 1``num1[j] = 0num1[i] = 0``num1[j] = 1
num1[i] = 1``num1[j] = 0num2[i] = 1``num2[j] = 0num1[i] = 1``num1[j] = 0num1[i] = 1``num1[j] = 1
num1[i] = 1``num1[j] = 0num2[i] = 0``num2[j] = 1num1[i] = 1``num1[j] = 1num1[i] = 0``num1[j] = 1

由于ij两者的地位是等价的,因此我们只需要求出以下四种情况下的索引i的个数

  1. num1[i] == 1num2[i] == 1i的个数,记为cnt11
  2. num1[i] == 0num2[i] == 0i的个数,记为cnt00
  3. num1[i] == 1num2[i] == 0i的个数,记为cnt10
  4. num1[i] == 0num2[i] == 1i的个数,记为cnt01

上述表格中的三种情况的个数,根据乘法原理,分别对应

  • cnt10 * cnt00
  • cnt11 * cnt00
  • cnt10 * cnt01

再将上述三者的结果相加,即为答案。

代码

Python

# 题目:2023B-出错的或电路
# 分值:200
# 作者:闭着眼睛学数理化
# 算法:数学/乘法原理
# 代码看不懂的地方,请直接在群上提问n = int(input())
num1 = input()
num2 = input()# 初始化四个变量,分别统计四种情况
cnt11, cnt00, cnt10, cnt01 = 0, 0, 0, 0
for i in range(n):# 分别根据num1[i]和num2[i]的情况# 统计对应变量的个数if num1[i] == "1" and num2[i] == "1":cnt11 += 1elif num1[i] == "0" and num2[i] == "0":cnt00 += 1elif num1[i] == "1" and num2[i] == "0":cnt10 += 1elif num1[i] == "0" and num2[i] == "1":cnt01 += 1# 根据乘法原理,进行计算
ans = cnt10 * cnt00 + cnt11 * cnt00 + cnt10 * cnt01
print(ans)

Java

import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int n = scanner.nextInt();String num1 = scanner.next();String num2 = scanner.next();int cnt11 = 0, cnt00 = 0, cnt10 = 0, cnt01 = 0;for (int i = 0; i < n; i++) {if (num1.charAt(i) == '1' && num2.charAt(i) == '1') {cnt11++;} else if (num1.charAt(i) == '0' && num2.charAt(i) == '0') {cnt00++;} else if (num1.charAt(i) == '1' && num2.charAt(i) == '0') {cnt10++;} else if (num1.charAt(i) == '0' && num2.charAt(i) == '1') {cnt01++;}}int ans = cnt10 * cnt00 + cnt11 * cnt00 + cnt10 * cnt01;System.out.println(ans);}
}

C++

#include <iostream>
using namespace std;int main() {int n;cin >> n;string num1, num2;cin >> num1 >> num2;int cnt11 = 0, cnt00 = 0, cnt10 = 0, cnt01 = 0;for (int i = 0; i < n; i++) {if (num1[i] == '1' && num2[i] == '1') {cnt11++;} else if (num1[i] == '0' && num2[i] == '0') {cnt00++;} else if (num1[i] == '1' && num2[i] == '0') {cnt10++;} else if (num1[i] == '0' && num2[i] == '1') {cnt01++;}}int ans = cnt10 * cnt00 + cnt11 * cnt00 + cnt10 * cnt01;cout << ans << endl;return 0;
}

时空复杂度

时间复杂度:O(N)。一次遍历求出四个变量的情况。

空间复杂度:O(1)。仅需若干常数变量


华为OD算法/大厂面试高频题算法练习冲刺训练

  • 华为OD算法/大厂面试高频题算法冲刺训练目前开始常态化报名!目前已服务100+同学成功上岸!

  • 课程讲师为全网50w+粉丝编程博主@吴师兄学算法 以及小红书头部编程博主@闭着眼睛学数理化

  • 每期人数维持在20人内,保证能够最大限度地满足到每一个同学的需求,达到和1v1同样的学习效果!

  • 60+天陪伴式学习,40+直播课时,300+动画图解视频,300+LeetCode经典题,200+华为OD真题/大厂真题,还有简历修改、模拟面试、专属HR对接将为你解锁

  • 可上全网独家的欧弟OJ系统练习华子OD、大厂真题

  • 可查看链接 大厂真题汇总 & OD真题汇总(持续更新)

  • 绿色聊天软件戳 od1336了解更多

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

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

相关文章

基于SpringBoot+Vue的学校在线学习系统

开发环境 IDEA JDK1.8 MySQL8.0Node 系统简介 本系统拥有管理员&#xff0c;教师&#xff0c;学生三种身份登录&#xff0c;管理员登录可以查看所有信息&#xff0c;教师登录可以发布作业&#xff0c;查看试卷&#xff0c;回答问题等&#xff0c;学校登录可以查看作业&…

【矩阵论】Chapter 6—矩阵分解知识点总结复习(附Python实现)

文章目录 1 满秩分解&#xff08;Full-Rank Factorization&#xff09;2 三角分解&#xff08;Triangular Factorization&#xff09;3 正交三角分解&#xff08;QR Factorization&#xff09;4 奇异值分解&#xff08;SVD&#xff09; 1 满秩分解&#xff08;Full-Rank Factor…

react.js源码二

三、调度Scheduler scheduling(调度)是fiber reconciliation的一个过程&#xff0c;主要决定应该在何时做什么?在stack reconciler中&#xff0c;reconciliation是“一气呵成”&#xff0c;对于函数来说&#xff0c;这没什么问题&#xff0c;因为我们只想要函数的运行结果&…

什么是CDN?用了CDN一定会更快吗?

文章目录 前言CDN是什么?CDN的工作原理为什么要加个CNAME那么麻烦&#xff1f;怎么知道哪个服务器IP里调用方最近&#xff1f; 回源是什么回源是什么&#xff1f;那还有哪些情况会发生回源呢&#xff1f; 怎么判断是否发生回源用了CDN一定比不用的更快吗&#xff1f;什么情况下…

光伏电站全貌

光伏电站 简介 每一篇文章开篇我都会写一个内容简介&#xff0c;一来梳理自己的写作思路&#xff0c;二来方便读者整体了解文章写作意图和脉络。本篇是新能源方面的开篇之作&#xff0c;我选取了介绍光伏电站基础知识&#xff0c;首先我们要了解光伏电站基础分类&#xff0c;然…

PHP基础 - 运算符

算术运算符 运算符描述实例+加法$x = 2 + 2; echo $x;-减法$x = 5 - 3; echo $x;*乘法$x = 4 * 3; echo $x;/除法$x = 10 / 2; echo $x;%取余$x = 15 % 4; echo $x;++自增$x = 5; $x++; echo $x;--自减$x = 5; $x--; echo $x;算术运算符的使用场景: 1)加法运算符 +:用于将两…

Copilot的11个新功能,你不能错过!

我的新书《Android App开发入门与实战》已于2020年8月由人民邮电出版社出版&#xff0c;欢迎购买。点击进入详情 文章目录 1. PowerPoint2. Excel3. One Note4. Word5. 必应聊天现在变为Copilot6. GPT-4为Copilot聊天提供动力7. Microsoft Teams8. Outlook9. Copilot Studio10.…

磁盘存储器

目录 1.1 磁盘存储器1.2 磁盘的性能指标1.3 磁盘存储器(续)1.4 磁盘阵列 \quad \quad \quad 左南右北为0 左北右南为1 \quad \quad 1.1 磁盘存储器 \quad 磁盘的驱动器 \quad 磁盘的控制器 \quad 主机每次对磁盘进行读和写操作都是以扇区为单位的 现在比较流行的是SATA标准 \…

【kafka实践】12|如何实现exactly once

前面的章节中我们聊到如何避免保证消息丢失&#xff0c;没有印象的同学可以再看看&#xff0c;本节我们将展开如何实现kafka的一次精确。 首先我们需要明白两个概念“幂等”和“事物” 幂等 “幂等”这个词原是数学领域中的概念&#xff0c;指的是某些操作或函数能够被执行多…

基于SpringBoot 2+Layui实现的管理后台系统源码+数据库+安装使用说明

springboot-plus 一个基于SpringBoot 2 的管理后台系统,包含了用户管理&#xff0c;组织机构管理&#xff0c;角色管理&#xff0c;功能点管理&#xff0c;菜单管理&#xff0c;权限分配&#xff0c;数据权限分配&#xff0c;代码生成等功能 相比其他开源的后台系统&#xff0…

vue 实现返回顶部功能-指定盒子滚动区域

vue 实现返回顶部功能-指定盒子滚动区域 html代码css代码返回顶部显示/隐藏返回标志 html代码 <a-icontype"vertical-align-top"class"top"name"back-top"click"backTop"v-if"btnFlag"/>css代码 .top {height: 35px;…

令牌桶算法理解学习(限流算法)

令牌桶算法是网络流量整形&#xff08;Traffic Shaping&#xff09;和速率限制&#xff08;Rate Limiting&#xff09;中最常使用的一种算法。典型情况下&#xff0c;令牌桶算法用来控制发送到网络上的数据的数目&#xff0c;并允许突发数据的发送。 用简单的话语来说就是限制…

Vscode中配置SSH

方法&#xff1a; 本地生成秘钥&#xff0c;并将生成的秘钥保存在服务器上 步骤&#xff1a; 一、用户端生成秘钥 1、在cmd中输入ssh-keygen -t rsa&#xff0c;一直点回车即可 2、打开生成的秘钥文件&#xff08;位置&#xff1a;C:\Users\用户名\.ssh\id_rsa.pub&#x…

【Java】BigInteger用法

前言 在Java中&#xff0c;由于没有long long类型。如果需要使用比long类型更大的整数数据时&#xff0c;就可以使用BigInteger类&#xff0c;它支持任意精度的整数。 创建BigInteger类型数据 Test public void test1() {Scanner scan new Scanner(System.in);//1.控制台读…

leetcode做题笔记2048. 下一个更大的数值平衡数

如果整数 x 满足&#xff1a;对于每个数位 d &#xff0c;这个数位 恰好 在 x 中出现 d 次。那么整数 x 就是一个 数值平衡数 。 给你一个整数 n &#xff0c;请你返回 严格大于 n 的 最小数值平衡数 。 示例 1&#xff1a; 输入&#xff1a;n 1 输出&#xff1a;22 解释&a…

Linux中的SNAT与DNAT实践

Linux中的SNAT与DNAT实践 1、SNAT的介绍1.1&#xff0c;SNAT概述1.2&#xff0c;SNAT源地址转换过程1.3&#xff0c;SNAT转换 2、DNAT的介绍2.1&#xff0c;DNAT概述2.2&#xff0c;DNAT转换前提条件2.3&#xff0c;DNAT的转换 3、防火墙规则的备份和还原4、tcpdump抓包工具的运…

腾讯再推互动微短剧,游戏的风吹向了短剧

当你看剧时不再拥有上帝视角&#xff0c;处在女主的位置上&#xff0c;你又会做出什么样的选择&#xff1f; 腾讯最新上线的短剧《摩玉玄奇2》在原版之外还推出了互动版&#xff0c;就给出了这样一个新玩法。 《摩玉玄奇2》原版是普通的后宫职场微短剧&#xff0c;互动版则是…

虚拟机VMware安装centos以及配置网络

目录 1、CentOS7的下载2、CentOS7的配置3、CentOS7的安装4、CentOS7的网络配置 4.1、自动获取IP4.2、固定获取IP 5、XShell连接CentO 准备工作&#xff1a;提前下载和安装好VMware。VMware的安装可以参考这一篇文章&#xff1a;VMware15的下载及安装教程。 1、CentOS7的下载 …

qt 字符串操作

在 QT 中&#xff0c;你可以使用QString类来操作字符串。QString是一个模板类&#xff0c;它可以存储不同字符集的字符串&#xff0c;并且提供了许多用于操作字符串的方法。 以下是一些常见的操作字符串的方法&#xff1a; append()方法&#xff1a;将一个字符串附加到QString的…

从零开始搭建企业管理系统(五):统一响应结果和全局异常处理

统一响应结果和全局异常处理 前言统一响应结果定义响应结构定义响应对象定义响应状态对象统一返回响应对象定义 Controller 拦截类 全局异常处理 前言 做个功能之前我们想一下为什么要做统一响应结果和全局异常处理呢&#xff1f; 这是因为我们的项目采用的是前后端分离开发&am…