找出一组数据的不同数据

来源:互联网 发布:软件自动化研究生 编辑:程序博客网 时间:2024/05/22 14:56

        一组数据中只有一个数字出现了一次,其他所有数字都是成对出现的。(使用位运算)

例如:

数据:1 3 5 7 1 3 5 8这组数据中,只有7出现了一次。

代码如下:

#include<stdio.h>int one_time(int x[],int n){int i = 0;int j = 0;for(i=0; i<n-1; i++){for(j=i+1; j<n; j++){if((x[i]^x[j])==0)break;}}     if((x[i]^x[j])!=0)        return x[i];}int main(){int a[9] = {1,1,2,2,3,3,4,4,5};int tmp = 0;tmp=one_time(a,9);printf("%d\n",tmp);return 0;}<strong></strong>
这种方法只能找出一个不同的数字,所以要找出两个不同只能另想方法了。

#include <stdio.h>void find(int arr[], int sz, int *num1, int *num2){int i = 0;int ret = 0;int pos = 0;for(i=0; i<sz; i++){ret ^= arr[i];}for(i=0; i<32; i++){if(((ret>>i)&1) == 1){pos = i;break;}}for(i=0; i<sz; i++){if(((arr[i]>>pos)&1) == 1){*num1 ^= arr[i];}}*num2 = ret ^ *num1;}int main(){int i = 0;int arr[] = {1,2,3,4,1,2,3,4,5,6};int x = 0;int y = 0;find(arr, 10, &x, &y);printf("%d\n", x);printf("%d\n", y);return 0;}





0 0
原创粉丝点击