关于按位异或用于抵消成对出现的数据
来源:互联网 发布:电信网络电视多少钱 编辑:程序博客网 时间:2024/05/18 03:39
给n个数
其中n-1个数出现了两次只有一个数出现了一次,找到它并输出
一组测试,输入n个数,均可用int表示
n<=10^7
由于0^0为0,0^1为1,所以0按位异或任何数都是这个数字本身;
对于两个相同的数字,由于每一位都相同,所以这两个数的按位异或为0,于是就抵消了;当数字不是按照两个相同数字连在一起给出时,会有以下几种情况:
(第一个数)n2
(第二个数)ans ^= n2
(前两个数的按位异或)ans ^= n1
(前两个数按位异或的结果再按位异或第一个数)0000011110101101
由此可见,当两个数据不相邻时,也可以将两个相同数字自行抵消
好高科技诶~~~
(思路源自行知哥哥~~)
代码:(281ms,236kb)
int num,ans;ans = 0;while ( scanf("%d",&num) != -1 ){ans ^= num;}printf("%d",ans);
- 关于按位异或用于抵消成对出现的数据
- ^异或运算。求解成对出现的一个未成对的数。
- 关于break MISSING_BLOCK_LABEL成对出现
- 求一组成对出现的数据中的单身狗
- 求一组成对出现的数据中的单身狗
- 其他数字都是成对出现,找出唯一单独出现的数字------强大的异或
- 一组数据中只有一个数字出现了一次。其他所有数字都是成对出现的。
- BenchmarkSQL用于windows上的压测加载数据时出现错误:找不到或无法加载主类LoadData
- 笔试面试成对出现的一组数,只有一个或两个只出现一次的数字,找到它们。
- (拓展)在一组成对出现的数据中找出两个不同的数
- 关于html语言中的元素标签有哪些是直接闭合的</>,而不是成对出现
- 关于MFC中数据收发后出现的指针为空或数据数组崩溃毁坏
- 找出数组中非成对出现的数
- pthread_cleanup_push/pop成对出现的意义
- pthread_cleanup_push/pop成对出现的意义
- 【C语言】【笔试题】找出一组数据中成单出现的数字,其他所有数字都是成对出现的。(移位)
- 一组数据中只有一个数字出现了一次。其他所有数字都是成对出现的。请找出这个数字。
- 一组数据中只有一个数字出现一次 ;其他所有数字都是成对出现的请找出这个数字。
- PHP做图书馆借书到期提醒与定时天气预报
- 黑马程序员:Map集合:Hashtable、HashMap、TreeMap介绍
- hdu 4427 Math Magic
- 计算程序运行的时间
- Yii学习指南(改编)1--什么是Yii
- 关于按位异或用于抵消成对出现的数据
- Hibernate:QBC查询语言
- Yii学习指南(改编)2--创建第一个 Yii 应用
- ARM学习笔记002之gcc-4.3.2编译器不支持硬件除法运算的解决方法
- HTML tab菜单选项
- 索引 详解
- memcach 存储
- Python的异步文件IO操作
- Hibernate:二级缓存