C语言 寻找单身狗(2个

此题知识:a^0=a;a^a=0;传值调用和传址调用要分清作用

题目:在 1,2,3,4,5,6,1,3,4,5这几个数字中找出只出现一次的数字并打印在屏幕上

解题思路:先将所有数字异或起来,得到一个数字tmp,此题中tmp=00.....0011(2进制);

然后找到最右边第一个为一的位数用k去存放起来;这样就能将2和6分开起来,这里是解题的关键。

再然后遍历数组,将k位(二进制)为1的异或起来,不为1的异或起来存放两个变量中然后打印在屏幕上,本题中多次利用a^0=a;a^a=0;

void FindNum(int* arr, int n, int* pnum1, int* pnum2)//传址调用
{
	int tmp = 0;
	for (int i = 0; i < n; i++)
	{
		tmp ^= arr[i];
	}
	int k = 0;
	for (int i = 0; i < 32; i++)
	{
		if (((tmp >> i) & 1) != 0)
		{
			k = i;
			break;
		}
	}
	*pnum1 = *pnum2 = 0;
	for (int i = 0; i < n; i++)
	{
		if (((arr[i] >> k) & 1) != 0)
		{
			*pnum1 ^= arr[i];
		}
		else *pnum2 ^= arr[i];
	}
}
int main()
{
	int arr[] = { 1,2,3,4,5,6,1,3,4,5 };
	int n = sizeof(arr) / sizeof(arr[0]);
	int num1 = 0, num2 = 0;
	FindNum(arr, n, &num1, &num2);
	printf("%d %d", num1, num2);
	return 0;
}

相关推荐

  1. C语言 寻找单身2

    2024-03-11 14:38:03       43 阅读
  2. C语言编程题-单身

    2024-03-11 14:38:03       55 阅读
  3. C语言——找单身1

    2024-03-11 14:38:03       29 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-11 14:38:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-11 14:38:03       101 阅读
  3. 在Django里面运行非项目文件

    2024-03-11 14:38:03       82 阅读
  4. Python语言-面向对象

    2024-03-11 14:38:03       91 阅读

热门阅读

  1. 「CISP题库精讲」CISP题库习题解析精讲6道

    2024-03-11 14:38:03       46 阅读
  2. mysql随笔

    2024-03-11 14:38:03       36 阅读
  3. 题记(51)--L1-023 输出GPLT

    2024-03-11 14:38:03       44 阅读
  4. 网安面试(协议篇)

    2024-03-11 14:38:03       39 阅读
  5. Hive招聘数据分析

    2024-03-11 14:38:03       44 阅读
  6. elementUI日期选择器禁用功能

    2024-03-11 14:38:03       36 阅读
  7. 怎么升级python 的 chromedriver 版本?

    2024-03-11 14:38:03       45 阅读
  8. 笔试面试(持续更新)

    2024-03-11 14:38:03       39 阅读