【C语言】每日一代码:单身狗2

#define _CRT_SECURE_NO_WARNINGS
#include

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语言,算法,数据结构)