#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
void find_single_dog2(int arr[], int sz, int* ps1, int* ps2)
{
int r = 0;
int i = 0;
for (i = 0; i < sz; i++)
{
r ^= arr[i];
}
int pos = 0;
for (i = 0; i < 32; i++)
{
if (((r >> i) & 1) == 1)
{
pos = i;
break;
}
}
for (int i = 0; i < sz; i++)
{
if (((arr[i] >> pos) & 1) == 1)
{
(*ps1) ^= arr[i];
}
else {
(*ps2) ^= arr[i];
}
}
}
int main()
{
int arr[] = { 1,2,3,4,5,1,2,3,4,6 };
int sz = sizeof(arr) / sizeof(arr[0]);
int ps1 = 0;
int ps2 = 0;
find_single_dog2(arr, sz, &ps1, &ps2);
printf("两个单身狗分别为:%d 和 %d", ps1, ps2);
return 0;
}
【C语言】每日一代码:单身狗2
最新推荐文章于 2024-10-31 16:16:13 发布
这篇文章详细描述了一个C++程序,名为`find_single_dog2`,它通过位操作在给定数组中查找两个特定值并将它们存储在指针所指向的位置。函数首先找到数组中第一个出现的特定位模式,然后根据该模式在剩余元素中找到另一个匹配项。
摘要由CSDN通过智能技术生成