使用位操作取出一组数据中唯一出现一次的两个元素
编程思路:
1、定义要找出的这组元素;
2、第一次遍历这组数据,找出唯一出现的元素的&的值;
3、定义pos变量,取出第二步找出的这个数的自左向右数第一个不为0的二进制数位;
4、将第一步定义的这组元素按pos位是否为1分为两部分,此时这两个唯一出现一次的元素被分到两组数据中;
5、再采用找出一组数据中唯一出现一次的一个元素的方法分别找出这两个元素;https://mp.csdn.net/postedit/89406967
6、打印结果。
具体代码如下:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main() {
int a[10] = { 1, 5, 2, 3, 4, 1, 6, 3, 4, 2 };
int i;
int num1 = 0, num2 = 0, sum = 0;
int pos;
for (i = 0; i < 10; i++) {
sum ^= a[i];
}
for (i = 0; i < 32; i++) {
if (sum & 1 << i) {
pos = i;
break;
}
}
for (i = 0; i < 10; i++) {
if (a[i] & 1 << pos) {
num1 ^= a[i];
}
else {
num2 ^= a[i];
}
}
printf("%d %d", num1, num2);
system("pause");
return 0;
}