1.找出单独的一个数字
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
int find_single(int arr[],int sz)
{
int i = 0;
int tmp = 0;
for(i=0; i<sz; i++)
{
tmp^=arr[i];
}
return tmp;
}
int main()
{
int arr[]={1,1,2,2,3,3,4,5,5,6,6};
int sz = sizeof(arr)/sizeof(arr[0]);
int ret=find_single(arr,sz);
printf("the single num is:%d\n",ret);
system("pause");
return 0;
}
2.找出单独出现的两个数字,
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
void find_two_diff(int arr[],int sz)
{
int ret = 0;
int i = 0;
int n1 = 0;
int n2 = 0;
char tmp = 0;
for(i=0; i<sz; i++)
{
ret^=arr[i];
}
for(i=0; i<32; i++)
{
if(((ret>>i) & 1) == 1)
tmp=i;
}
for(i=0; i<sz; i++)
{
if(((arr[i]>>tmp)&1) == 1)
{
n1^=arr[i];
}
else
{
n2^=arr[i];
}
}
printf("n1=%d n2=%d\n",n1,n2);
}
int main()
{
int arr[]={1,1,5,2,3,3,4,5,6,6,7,7};
int sz = sizeof(arr)/sizeof(arr[0]);
find_two_diff(arr,sz);
system("pause");
return 0;
}
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
void find_two_diff(int arr[],int sz,int *n1,int *n2)
{
int ret = 0;
int i = 0;
char tmp = 0;
for(i=0; i<sz; i++)
{
ret^=arr[i];
}
for(i=0; i<32; i++)
{
if(((ret>>i) & 1) == 1)
tmp=i;
}
for(i=0; i<sz; i++)
{
if(((arr[i]>>tmp)&1) == 1)
{
*n1^=arr[i];
}
else
{
*n2^=arr[i];
}
}
}
int main()
{
int arr[]={1,1,2,2,3,3,4,5,6,6,7,7};
int sz = sizeof(arr)/sizeof(arr[0]);
int num1 = 0;
int num2 = 0;
find_two_diff(arr,sz,&num1,&num2);//num1和num2为返回型参数
printf("num1=%d num2=%d\n",num1,num2);
system("pause");
return 0;
}