*1.一个数组中只有两个数字是出现一次,其他所有数字都出现了两次。
找出这两个数字,编程实现。*/
方法一:
#include<stdio.h>
int main()
{
int arr[12] = {1,2,3,4,5,6,1,2,3,4,5,9};
int i = 0;
int j = 0;
int cnt = 0;
for (i=0;i<sizeof(arr)/sizeof(arr[0]);i++)
{
cnt = 0;
for (j=0;j<sizeof(arr)/sizeof(arr[0]);j++)
{
if (arr[i] == arr[j])
{
cnt++;
}
}
if (cnt == 1)
{
printf("%d 出现一次\n",arr[i]);
}
}
return 0;
}
方法二:
#include<stdio.h>
int main()
{
int i = 0;
int ret = 0;
int pos = 0;
int arr[] = { 1,2,3,4,5,6,1,2,3,4 };
int sz = sizeof(arr) / sizeof(arr[0]);
int num1 = 0;
int num2 = 0;
for (i = 0; i < sz; i++)
{
ret ^= arr[i];
}
//找ret二进制中为1的一位
for (i = 0; i < 32; i++)
{
if (((ret >> 1) & 1) == 1)
{
pos = i;
break;
}
}
//分组
for (i = 0; i < sz; i++)
{
if (((arr[i] >> pos) & 1)==1)
{
num1 ^= arr[i];
}
}
num2 = num1^ret;
printf("num1 = %d num2 = %d\n", num1, num2);
system("pause");
return 0;
}
相比以上两种方法,方法一还是简单一些,望大佬有更好的方法推荐