一串数字中有两个只出现一次的数字其余都是成对相同,求这两个数
当然如果这个问题是只有一个不同的数,其他数字成对相同,那么就是把所有数字异或就得出这个数了
这次是有两个只出现一次的数字,其他数字都成对相同
1)先把所有数都异或得到数t
2)算出t的二进制第一个1的位置flag
3)将所有数根据二进制flag位置是否为1分成两组b1[],b2[] (此时每组数字的个数一定是奇数)
4)将b1组异或得到ans1,将b2组异或得到ans2
#include<iostream>
#include<stdio.h>
using namespace std;
#define isset(a,n) a&(1<<(n))
#define N 1000
int main(){int t,c,i,b[N],b1[N],b2[N],flag,cou1,cou2,ans1,ans2;while(cin>>c,c){if(c%2!=0){cout<<"c必须为偶数"<<endl;continue;}cin>>b[0];t=b[0];for(i=1;i<c;i++){cin>>b[i];t^=b[i];}flag=0;for(i=0;i<32;i++)if(isset(t,i)){flag=i;break;}cou1=cou2=0;for(int i=0;i<c;i++){if(isset(b[i],flag))b1[cou1++]=b[i];elseb2[cou2++]=b[i];}ans1=b1[0];ans2=b2[0];for(i=1;i<cou1;i++)ans1^=b1[i];for(i=1;i<cou2;i++)ans2^=b2[i];cout<<ans1<<" "<<ans2<<endl;}}
一串数字中有两个只出现一次的数字其余都是成对相同,求这两个数相关推荐
- 找出数组中两个只出现一次的数字
题目:一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字 通过这道题感觉位运算很强大~这道题利用异或的几个性质:任何数与其本身异或值都为0,异或运算满足交换律. ...
- 算法题:找出整数数组中两个只出现一次的数字
问题:一个整数数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字.要求时间复杂度为O(n),空间复杂度为O(1). 分析:这是一个很新颖的关于位运算的题目. 首先考虑这 ...
- 一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字
package demo;import java.util.Arrays;/** 题目描述 一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字.*/ //num ...
- 一个数组中只有两个数字是出现一次,其他所有数字都出现了两次。 编写一个函数找出这两个只出现一次的数字。
一个数组中只有两个数字是出现一次,其他所有数字都出现了两次.编写一个函数找出这两个只出现一次的数字. 1.代码编写 2.结果 1.代码编写 代码如下(示例): #define _CRT_SECURE_ ...
- python找出只出现一次的数字_Python数组中只出现一次的数字
任何一个数字异或他自己都等于0,0异或任何一个数都等于那个数.数组中出了两个数字之外,其他数字都出现两次,那么我们从头到尾依次异或数组中的每个数,那么出现两次的数字都在整个过程中被抵消掉,那两个不同的 ...
- 微策略2011校园招聘笔试题(找出数组中两个只出现一次的数字)
1.8*8的棋盘上面放着64个不同价值的礼物,每个小的棋盘上面放置一个礼物(礼物的价值大于0),一个人初始位置在棋盘的左上角,每次他只能向下或向右移动一步,并拿走对应棋盘上的礼物,结束位置在棋盘的右下 ...
- 【算法14】找出数组中两个只出现一次的数字
[题 目]一个整型数组中除了两个数字外,其他的数字都出现两次.请找出这两个只在数组中出现一次的数字.要求时间复杂度O(n),空间复杂度O(1). [思 路]首先我们考虑一个稍微简单点的情况:如果这个数 ...
- 算法:一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。(异或符号的妙用)
异或的性质: 1.交换律 2.结合律(即(a^b)^c == a^(b^c)) 3.对于任何数x,都有x^x=0,x^0=x 4.自反性 A XOR B XOR B = A xor 0 = A 算法 ...
- 2020-06-10:给定一个无序数组,里面数都是成双数的,只有一个数是成单数的,求这个数? 如果上面那题里面有两个单数,怎么求出来?
1.异或 2.字典或集合 3.排序 golang语言采用异或方式,代码如下: package test22_singlenumber3import ("fmt""test ...
- 题目1256:找出两个只出现了一次的数字
题目描述: 一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字. 输入: 输入的第一行包括一个整数N(1<=N<=1000). 接下来的一行包括N个 ...
最新文章
- 架构设计文章读后感7
- [转]NYOJ-511-移动小球
- centos 修改ssh默认端口号
- Wayland 源码解析之代码结构
- EntLib.com Forum / YAF 开源论坛--源码的目录结构(对分析代码很有帮助)
- oracle catalog命令,使用Catalog命令注册RMAN备份集
- 【2018蓝桥省赛A组C/C++】倍数问题(dp+滚动数组)
- 父与子的编程之旅 python 3_Python!帮我做一下选择呗:父与子的编程之旅 学习笔记(5) 2018-07-10...
- 有什么软件可以把视频上下拼接在一起?
- 为IT和互联网写历史
- qq里面cap字符_qq字符
- 腾讯云离线语音识别sdk
- 批量抠图,只需要这几行python代码!
- 金融信贷存量客户运营管理
- canvans——合并图片
- 全球与中国生物气溶胶监测仪市场深度研究分析报告
- 从腾讯的职级系统,看清自己的职场宿命(转载)
- 6种数据分析实用方法,终于有人讲明白了
- [C#]自定义修改文件夹颜色及图标含源码
- 10 | 介绍外包、外派、驻场、实施、ToB/ToC,外包真的那么不堪么?
热门文章
- Android 动态改变布局属性RelativeLayout.LayoutParams.addRule()
- Winson.Framework 1.5发布!
- Ubuntu18.04-安装opencv3.2.0_contrib
- my docker note
- encodeURI和uncodeURIComponent的介绍
- 利用 Logstash-input-jdbc同步sqlserver数据到elasticsearch
- 关于OpenFOAM的一些学习资料
- 利用jquery.form实现异步上传文件
- 几个IE与Firefox的兼容性问题 (一、网络转载)
- C#中计算两个时间的差