第一章 位运算的奇巧淫技

1.2 题解:如何找数组中唯一成对的那个数

知识点:

  1. A^A=0
  2. A^0=A(一个数与0进行按位异或,结果是他自己)
  3. 对一个序列进行按位异或,可以消除掉序列中的重复项,比如:A^A ^B ^C ^C=B(根据第1、2条规则)
  4. 对一个序列补一下,就可以将不重复的元素变成重复的元素,重复的元素变成不重复的,从而可以找到原本序列中重复项。比如原本是 A^B ^C ^C,来互补一下,变成 A ^B ^C ^C ^A ^B ^C=C
  5. 使用^,计算机会对每一个变量的二进制存储形式做按位异或。

程序思路:

异或法:

计算式子:题设数组的每一个元素依次进行按位异或,所得结果再与1到1000依次进行按位异或,所得结果即为重复项。

暴力法:

使用辅助数组arr_tag来记录arr数组中,1到1000出现的次数,将arr元素的值对应成arr_tag下标,对应的下标对应的元素值为出现的次数。


```c
#include "stdio.h"
#define arr_len 1000
int main()
{int arr[arr_len+1];int random = 59;//重复项int i;//待处理数列生成for (i = 1; i<= arr_len; i++) {arr[i - 1] = i;/*printf("arr[%d]=%d\n", i-1, i);*/}arr[arr_len] = random;//异或法求解int middle = 0;for (i=0;i<arr_len; i++) {//i的次数为做异或的次数(异或符号的个数)middle ^= (i + 1);//middle必须从0开始,因为0与任何东西异或结果都是另一个东西本身;或者middle和i均从1开始/*printf("%d\n", middle);*/}for (i = 0;i<=arr_len;i++) {middle ^= arr[i];}printf("random= %d\n", middle);//暴力法进行对拍int arr_tag[arr_len + 1];for (i = 0;i<arr_len+1; i++) {arr_tag[i] = 0;}for (i = 0; i < arr_len + 1; i++) {if ((++arr_tag[arr[i]]) == 2) {//判断条件应为arr_tag[arr[i]]++) == 1或者++arr_tag[arr[i]]) == 2,因为如果是第二次出现,则本次读取arr_tag数组应该读取到的值是1printf("暴力法结果:%d", arr[i]);//第一个条件是先调用值,再加。第二个条件是先加,再调用值。碰到重复项的情况是,arr_tag已经有值为1,然后再自加,变成2.break;}}return 0;
}

算法很美第一章 位运算的奇巧淫技相关推荐

  1. 蓝桥杯算法竞赛系列第一章——位运算的奇巧淫技及其实战

    遇见蓝桥遇见你,不负代码不负卿! 第二章"递归"已将更新咯,欢迎铁汁们点评!蓝桥杯算法竞赛系列第二章--深入理解重难点之递归(上)_安然无虞的博客-CSDN博客 目录 一.位运算符 ...

  2. 最全的2021蓝桥杯算法课《算法很美》的学习笔记总目录+真题详解

    这里写目录标题 第一章 位运算 第二章 递归 第三章查找与排序

  3. 算法很美-位运算-找出落单的那个数

    上级目录:算法很美 1. 题目 一个数组里除了某一个数字之外,其他的数字都出现了两次.请写程序找出这个只出现一次的数字. 2. 异或思路 异或的运算是A ^ A=0,也就是说偶数个相同的元素异或,结果 ...

  4. 算法很美——数学问题

    算法很美--数学问题 题1:天平称重 问题描述: 用天平称重时,我们希望用尽可能少的砝码组合称出尽可能多的重量. 砝码重量分别是1,3,9,27,81--3的指数次幂,每种重量砝码只有一个 则它们可以 ...

  5. 风淋门控制器c语言程序代码,C语言程序设计 第10章位运算

    陋巷膳宿披萨小凹常情果壳.国乒稠油男用呈现发蒙密致撞角还在.碘值能工凝然晴明挂心石拐迸射纽澳.长发拆线锅巴除险公假沙司两袖抗御C语言程序设计 第10章位运算,破门共聚绮思蚕蛾锅焦?行窃乖觉资材芦花疝痛 ...

  6. 谭浩强c语言不讲位运算呢,谭浩强C语言教程第十二章-位运算.doc

    谭浩强C语言教程第十二章-位运算 12位运算1 12.1位运算符C语言提供了六种位运算符:1 12.1.1按位与运算1 12.1.2按位或运算2 12.1.3按位异或运算2 12.1.4求反运算3 1 ...

  7. 准备蓝桥杯之路(二) ------ 位运算的奇淫技艺

    准备蓝桥杯之路(二) ------ 位运算的奇淫技艺 前言   本人之前接触过最多的语言是python和java,平时用的较多的还是python,不过大赛有规定,研究生只能报java组,所以我计划之后 ...

  8. 位运算概览与奇巧淫技

    文章目录 一.位运算概述 二.位运算概览 异或 二进制数的原码.反码.补码 左移 << 右移 >> 无符号右移 >>> 三.位运算的使用奇巧淫技 判断奇偶数 ...

  9. 《Alogrithms》算法学习笔记——第一章:导语与数论

    本文基于<Algorithms>进行学习归纳,本文无论多简单的代码,本人都会尝试用C++将其实现一遍. 文章目录 零.前言 0.1 本篇介绍 0.2 从斐波那契开始了解算法 0.3 O符号 ...

最新文章

  1. 百度怎么不挣钱?一个吧居然有不下10种广告!
  2. android measure的时候报空指针
  3. java if-then和if-then-else语句(翻译自Java Tutorials)
  4. 数据通信技术_共建价值空间 共赢发展契机——2020华为贵数通新技术创享会在遵义市圆满举行...
  5. ETH:Windows搭建ETH(区块链技术)利用Web端和小程序端两种方式调用ETH上的SC智能合约
  6. 2017你该买房,还是卖房?
  7. STM32F4 HAL库开发 -- 复用功能外设
  8. Boost:在boost:array上使用constexpr进行测试
  9. Jpeglib使用指南, 各种压缩包的压缩和解压方法, 开源社区分裂史
  10. Python GUI界面编程初步 05- GUI框架PyQt的运用 - 02 PyQt的信号和槽例子
  11. 用ThreadLocal代替单例模式synchronized的使用
  12. CentOS SVN 服务器搭建
  13. 在linux中查找重复的文件夹,如何在Linux上找出并删除重复的文件:FSlint
  14. 检查丢失的软件包并安装它们的优雅方法?
  15. [原创]基于EDFlib/C++实现脑电数据EDF标准格式读写
  16. 心态-《积极的力量》书中的精髓:如何保持积极乐观的心态,从而提升我们的幸福感?
  17. 收集的JS常用正则表达式等
  18. TP5 控制器命名大小写问题
  19. Python学习-字典攻击
  20. Java使用Itext5与html模板生成pdf并支持下载

热门文章

  1. 微信小程序云开发如何实现读取和下载excel文件导入数据到云数据库中?简单好理解
  2. 自定义 showToast 组件,可直接使用,附源代码和使用说明
  3. java实现图片上传后裁剪,把白色背景变成透明图(电子印章)
  4. C# 产生验证码 利用背景图片绘制
  5. 中国通信行业进入5G时代,巨大发展空间值得期待!
  6. 5g消息与服务器,5G消息app下架 中国移动回应会重新上架
  7. android ibeacon sdk,智慧通行SDK
  8. 某购物网站推荐系统实现 | 数据库、推荐算法
  9. 《寒江独钓》内核学习笔记(1)-- IRP - .Little Hann
  10. 微信小程序怎么添加到主屏幕将微信小程序放到手机桌面?