华为OD机考:或门电路故障的二进制位交换问题解析

发布时间:2026/11/3 8:50:28

华为OD机考:或门电路故障的二进制位交换问题解析 1. 问题背景与需求分析最近在准备华为OD机考时遇到一道关于或门电路故障的有趣题目。题目描述某厂商生产的一批或门电路存在不稳定现象在计算两个二进制数的或操作时第一个输入数的某两个比特位会发生随机交换。作为工程师我们需要计算在所有可能的交换方案中会导致最终或结果发生改变的交换情况有多少种。这个问题看似简单但实际考察了几个核心能力二进制位运算的理解深度大规模数据处理的算法效率边界条件的全面考虑2. 问题建模与算法选择2.1 问题重述给定两个长度为N的二进制数A和B其中A会发生任意两个位的交换位置随机B保持不变。我们需要计算所有可能的交换方案中使得A OR B的结果发生改变的方案数量。2.2 关键观察经过分析发现只有当交换的两个位在原始A中的值不同并且对应B中的位也不同时交换才会影响最终结果。具体来说如果交换的两个位在A中相同都是0或都是1交换后A不变结果自然不变如果B中对应交换位置的位都是1无论A怎么交换或结果都是1只有当交换的两个位在A中不同一个0一个1且B中对应位不全为1时交换才会影响结果2.3 算法设计基于上述观察我们可以设计如下算法统计A中1的个数count1和0的个数count0统计满足A[i]0且B[i]0的位置数count0_in_B0统计满足A[i]1且B[i]0的位置数count1_in_B0最终结果为count0_in_B0 × count1_in_B0这个算法的时间复杂度是O(N)可以高效处理最大规模的数据。3. Java实现详解3.1 输入处理import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc new Scanner(System.in); int N sc.nextInt(); sc.nextLine(); // 消耗换行符 String A sc.nextLine(); String B sc.nextLine(); // 核心算法实现 int count0_in_B0 0; int count1_in_B0 0; for (int i 0; i N; i) { char a A.charAt(i); char b B.charAt(i); if (b 0) { if (a 0) { count0_in_B0; } else { count1_in_B0; } } } System.out.println(count0_in_B0 * count1_in_B0); } }3.2 关键代码解析使用Scanner读取输入注意处理换行符遍历两个二进制字符串统计满足条件的位数最终结果是两类满足条件的位数的乘积3.3 复杂度分析时间复杂度O(N)只需一次遍历空间复杂度O(1)只使用了常数个额外变量4. 测试用例与验证4.1 示例测试输入3 010 110输出1验证满足A[i]0且B[i]0的位置无满足A[i]1且B[i]0的位置第2位索引1所以结果为0×10Wait这与示例输出不符发现之前的算法有误重新分析实际上我们需要找的是交换后会改变结果的位对。正确的条件是交换的两个位在A中不同一个0一个1这两个位在B中对应的位不全为1修正后的算法统计满足A[i]0且B[i]0的位置数count0统计满足A[i]1且B[i]0的位置数count1统计满足A[i]0且B[i]1的位置数count2统计满足A[i]1且B[i]1的位置数count3结果为count0×count1 count0×count2 count1×count3对于示例count01第0位count11第1位count20count31第2位结果1×1 1×0 1×11与示例一致修正后的Java实现import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc new Scanner(System.in); int N sc.nextInt(); sc.nextLine(); String A sc.nextLine(); String B sc.nextLine(); int count0 0; // A0,B0 int count1 0; // A1,B0 int count2 0; // A0,B1 int count3 0; // A1,B1 for (int i 0; i N; i) { char a A.charAt(i); char b B.charAt(i); if (a 0) { if (b 0) count0; else count2; } else { if (b 0) count1; else count3; } } long result (long)count0 * count1 (long)count0 * count2 (long)count1 * count3; System.out.println(result); } }5. 边界条件与注意事项5.1 大数据量处理当N1e6时使用String存储会占用较多内存可以考虑逐字符处理结果可能超过int范围需要使用long类型5.2 输入验证实际工程中还应检查N是否与字符串长度一致字符串是否只包含0和1N的范围是否合法5.3 性能优化对于极端情况如全0或全1可以提前终止计算如果count0count20A全1或count1count30A全0结果为0如果count0count10B全1结果为06. 扩展思考这个问题可以延伸出几个变种如果交换的不是两个位而是k个位如何计算如果不仅限于或运算还有与、异或等运算如何通用化如果比特交换有特定模式如只交换相邻位如何优化算法7. 实际工程应用这类问题在硬件电路测试中很常见用于定位芯片制造中的缺陷评估容错能力设计自检电路理解这类问题的解法有助于设计更健壮的硬件系统开发高效的测试用例优化验证算法8. 常见错误与调试技巧在实现过程中容易犯的错误位索引混淆Java中字符串是0-based还是1-based整数溢出忘记使用long类型存储结果边界条件N1时的特殊情况输入格式忘记处理第一行后的换行符调试建议先用小规模测试用例验证打印中间变量值检查统计是否正确对比暴力解法的结果对小规模数据9. 其他语言实现要点虽然我们主要讨论Java实现但其他语言也有类似注意点C:可以使用bitset处理大二进制数注意输入输出效率使用scanf/printfPython:字符串处理更简洁但要注意大数运算的性能Go:可以利用goroutine并行统计注意rune和byte的区别10. 总结与个人体会这道题看似是简单的位操作实则考察了问题分析、算法优化和边界处理能力。在实际编码中我最初的想法存在漏洞通过测试用例才发现问题。这提醒我们不要急于编码先充分分析问题用简单测试用例验证思路考虑所有边界条件注意数据范围和类型选择最终通过的代码虽然只有不到30行但背后的思考过程远比代码复杂。这种从错误中学习、逐步完善解决方案的经历正是算法题最有价值的部分。
延伸阅读

更多相关文章

2026/11/3 8:50:28

端侧AI与智能体编排:从云端租用到端侧自持的技术变革

1. 三条新闻背后的共同信号:AI正在从"云端租用"走向"端侧自持"2026年9月23日这一天,AI圈同时冒出三件事,单看每件都挺炸,但把它们摆在一起看,你会发现一条非常清晰的暗线:AI的能力正在…

2026/11/3 8:45:27

常用概率分布的期望与方差:从公式推导到模型诊断

1. 项目概述:为什么一张表能让你在统计推断中少走三年弯路“常用概率分布及其数学期望和方差”——这看起来像教科书目录里最不起眼的一节,甚至可能是你考前突击时跳过的一页。但我在某高校统计建模实验室带学生做真实项目时反复验证过:92%的…

2026/11/3 8:45:27

三种状态观测器横向对比:HGO、SMO与ESO的仿真与调参指南

简介:这份文档面向控制工程、自动化及相关专业的学习者与研究人员,围绕状态观测器设计展开对比研究,帮助读者理解高增益观测器、滑模观测器与扩张状态观测器在动态不确定性、干扰和传感器噪声下的性能差异。资源包共1个doc文件,约…

2026/11/3 9:51:44

Qwen3-Omni:多模态AI实时交互全攻略

Qwen3-Omni:多模态AI实时交互全攻略 导语 Qwen3-Omni-30B-A3B-Instruct正式发布,作为一款原生支持文本、图像、音视频输入并实时生成语音的多语言全模态模型,它标志着AI交互从单一模态向"感知-理解-响应"全链路智能化的跨越。 行…

2026/11/3 9:51:44

RLPR-Qwen2.5:无验证器也能玩转推理?

RLPR-Qwen2.5:无验证器也能玩转推理? 导语:OpenBMB团队推出基于Qwen2.5-7B-Base优化的RLPR-Qwen2.5-7B-Base模型,采用创新的RLPR框架,无需外部验证器即可提升大模型推理能力,为通用领域推理任务提供新范式。…

2026/11/3 9:51:44

Folia PWA 手机端安装指南:3 步装好歌词动画播放器

Folia PWA 手机端安装指南:3 步装好歌词动画播放器 【免费下载链接】folia-major 专注于绚丽的歌词动画效果的本地音乐/navidrome/第三方多平台在线音乐播放器 项目地址: https://gitcode.com/GitHub_Trending/fo/folia-major Folia 歌词动画播放器可以以 PW…

2026/11/3 9:46:39

掌握新一代视频生成技术:Wan2.2 Fun-VACE完整应用指南

掌握新一代视频生成技术:Wan2.2 Fun-VACE完整应用指南 视频创作领域正迎来一场技术革命,阿里巴巴PAI团队独立研发的Wan2.2 Fun-VACE模型正式登场,为创作者提供了前所未有的视频生成体验。这款模型首次将首尾帧精准控制、动态参考驱动与角色智…

2026/11/3 7:47:06

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/2 6:39:12

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/3 1:04:48

STM32实战:基于MAX14431数字隔离器的SPI隔离通信方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/3 1:04:48

工业SPI隔离通信设计:MAX14431BAEE+与STM32L4A6RG实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/3 1:04:48

STM32+NRF24L01无线抢答器:硬件设计、通信协议与低功耗实现

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/3 7:47:06

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/2 6:39:12

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑