目录

题目描述

输入描述

输出描述

用例

题目解析

算法源码


题目描述

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

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

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

输入描述

第一行有一个正整数N;其中1≤N≤1000000。
第二行有一个长为N的二进制数,表示与电路的第一个输入数,即会发生比特交换的输入数。
第三行有一个长为N的二进制数,表示与电路的第二个输入数。注意第二个输入数不会发生比特交换。

输出描述

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

用例

输入 3
010
110
输出 1
说明

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

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

题目解析

这题其实就是求010的去重全排列:

  • 010
  • 100
  • 001

然后将每个排列和110或运算,看最终结果是否和 原始010和110的或运算结果相同。

关于去重全排列的生成请看:算法 - 全排列2_伏城之外的博客-CSDN博客

算法源码

/* JavaScript Node ACM模式 控制台输入获取 */
const readline = require("readline");const rl = readline.createInterface({input: process.stdin,output: process.stdout,
});const lines = [];
let n = 0;
rl.on("line", (line) => {lines.push(line);if (lines.length === 1) {n = lines[0];}if (n > 0 && lines.length === 3) {lines.shift();const [bin1, bin2] = lines.map((ele) => ele.substr(0, n));console.log(affectSwap(bin1, bin2));lines.length = 0;}
});/**** @param {string} bin1 可能产生错误交换的二进制* @param {string} bin2 不会发生错误的二进制*/
let result = [];function affectSwap(bin1, bin2) {const correct = bin1 | bin2;//const nums = bin1.split("");const count = {};Array.prototype.forEach.call(bin1, (num) => {count[num] ? count[num]++ : (count[num] = 1);});dsf([...new Set(bin1)], bin1.length, count, 0, []);let res = 0;result.forEach((bin) => {if ((bin | bin2) !== correct) {res++;}});return res;
}function dsf(nums, length, count, level, path) {if (level === length) {return result.push(path.join(""));}for (let i = 0; i < nums.length; i++) {let num = nums[i];if (count[num] > 0) {path.push(num);count[num]--;dsf(nums, length, count, level + 1, path);count[num]++;path.pop();}}
}

华为机试 - 出错的或电路相关推荐

  1. 集合篇10.华为机试(涮题记录2)

    华为机试 31.成绩排序(**not) 32. 矩阵乘法 33. 24点游戏算法(not) 34.配置文件恢复 35. 查找两个字符串a.b中的最长公共子串 36.MP3光标位置(not) 37.DN ...

  2. 华为机试108题(C 语言解答)

    Nowcoder题库链接:华为机试 HJ1 字符串最后一个单词的长度(字符串) 输入:hello nowcoder输出:8说明: 最后一个单词为nowcoder,长度为8 示例代码: HJ1.c #i ...

  3. 华为机试python需要需要当时编译通过吗_华为校招软开算法岗历年机试编程题77道C++代码详解(五)...

    温馨提示:考虑到华为每年校招机试在牛客网进行,所以本文以及同系列其他八篇文章的所有代码均仅保证在牛客网华为机试页面100%accepted.其他编译器使用本代码可能会出现不通过的情况,请知晓. 41. ...

  4. JavsScript牛客网华为机试(11-20)题解

    牛客网华为机试题解JavaScript版本 华为机试第11-20题解答(js) 11.数字颠倒 12.字符串反转 13.句子逆序 14.字符串排序 15.求int型数据在内存中存储时1的个数 16.购 ...

  5. [华为机试真题][2014]62.去除重复字符并排序

    题目 描述: 去除重复字符并排序 运行时间限制: 无限制 内容限制: 无限制 输入: 字符串 输出: 去除重复字符并排序的字符串 样例输入: aabcdefff 样例输出: abcdef 代码 /*- ...

  6. 牛客网--华为机试在线训练10:字符个数统计

    牛客网–华为机试在线训练10:字符个数统计 题目描述 编写一个函数,计算字符串中含有的不同字符的个数.字符在ACSII码范围内(0~127).不在范围内的不作统计. 输入描述: 输入N个字符,字符在A ...

  7. 牛客网–华为机试在线训练9:提取不重复的数

    牛客网–华为机试在线训练9:提取不重复的数 题目描述 输入一个int型整数,按照从右向左的阅读顺序,返回一个不含重复数字的新的整数. 输入描述: 输入一个int型整数 输出描述: 按照从右向左的阅读顺 ...

  8. 牛客网–华为机试在线训练8:合并表记录

    牛客网–华为机试在线训练8:合并表记录 题目描述 数据表记录包含表索引和数值,请对表索引相同的记录进行合并,即将相同索引的数值进行求和运算,输出按照key值升序进行输出. 输入描述: 先输入键值对的个 ...

  9. 牛客网–华为机试在线训练7:取近似值

    牛客网–华为机试在线训练7:取近似值 题目描述 写出一个程序,接受一个正浮点数值,输出该数值的近似整数值.如果小数点后数值大于等于5,向上取整:小于5,则向下取整. 输入描述: 输入一个正浮点数值 输 ...

最新文章

  1. 神经网络版员工离职预测
  2. Spring MVC - 配置Spring MVC
  3. Hama笔记:Unable to load native-hadoop library 和 Snappy native library not loaded 的解决
  4. 2016年印度光伏设备市场将猛增2倍达4GW以上
  5. php大文件上传插件,PHP 大文件上传进度条实现
  6. php要字符串的后四位,php如何截取字符串后四位
  7. dns服务器zones文件,DNS服务安装与配置
  8. 给你的数据来一个顶层设计
  9. 春季养生男性常搓九部位补肾又健脑
  10. c语言图书管理系统简单代码,C语言图书管理系统代码
  11. Proteus 8.13 安装教程
  12. win7网络无法连接其他计算机,Win7局域网不能访问如何解决?
  13. 【python 数据分析】不同情况下的t检验、Wilcoxon符号秩检验、Wilcoxon秩和检验、卡方检验、Fisher检验
  14. JS的unshift()和shift()
  15. 什么是Product Lead Growth( PLG)
  16. Linux 下的Chm 文件阅读器
  17. 简单粗暴理解与实现机器学习之K-近邻算法(三):距离度量、欧氏距离、曼哈顿距离、切比雪夫距离、闵可夫斯基距离、标准化距离、余弦距离、汉明距离、杰卡德距离、马氏距离
  18. 【云原生 | 19】Docker数据存储详解
  19. Unity获取物体自身坐标轴的方向以及沿着该方向运动的方法
  20. 机器学习实战(3)——分类

热门文章

  1. 最近阅读书目及一点感想
  2. LGT公益创投(中国)基金项目介绍
  3. excel 使用技巧小总结
  4. 非线性控制2.0——模糊逼近
  5. pdman 连接失败出错消息:Cannot load connection class because of underlying exceptiocom mysql. cj.
  6. JAVA语言 - Android拷贝assets文件(资源文件)
  7. Log4j2 重大漏洞与解决方案
  8. 浅谈因子分析(Factor Analysis)
  9. python while循环跳出_python如何跳出while循环
  10. 手机android版本2.3.6可以安装哪个版本的音乐播放器,喜马拉雅fm老版本2.3.6下载...