【每日一题】一组数据中只有一个数字出现了一次。其他所有数字都是成对出现的。请找出这个数字。(使用位运算)
【思路】利用异或运算(相同为0,相异为1),就跟冒泡思想一样,从第一个数字开始,让其跟之后的每个字符相比,利用异或运算思想,再设一个标记,将相同的标记起来,然后第二个数字跟他之后的数字作比较.......,一直到最后一个比较完毕为止,(此处需要循环实现)然后将标记出来的那个单独的数字输出就OK了
【代码】
int main()
{
int arr[] = { 1, 5, 2, 5, 2, 1, 7};
int sz = sizeof(arr) / sizeof(arr[0]);
int flag = 0;
for (int i = 0; i < sz; i++)
{
int flag = 0;
for (int j = i+1; j < sz; j++)
{
if (arr[i] ^ arr[j] == 0)//相同为0相异为1
{
flag = 1;
break;
}
}
if (flag == 0)
{
printf("单独的数字为:%d\n", arr[i]);
}
}
system("pause");
return 0;
}