找单身狗(c语言)

1./找单身狗

//在一个数组中只有两个数字出现一次,其他所以数字都出现了两次
//编写一个函数找出这两个只出现一次的数字

2.方法一:暴力求解,我们用冒泡函数,进行比较如果i==j,那么n++,如果n==1,那么我们将他存储在arr2\[\],然后我们将arr2\[\]进行打印,就可以了。

cs 复制代码
#include<stdio.h>
//方法一;
int main()
{
	int b = 0;
	int n = 0;
	int arr2[2] = { 0 };
	int arr[ ] = { 0,1,2,3,4,5,0,1,2,3 };
	int ret = sizeof(arr) / sizeof(arr[0]);
	for (int i = 0; i < ret; i++)
	{
		int n = 0;
		for (int j = 0; j < ret; j++)
		{
			if (arr[i] == arr[j])
			{
				n++;
			}
		}
		if (n == 1)
		{
			arr2[b] = arr[i];
			b++;
		}
	}
	for (int i = 0; i < b; i++)
	{
		printf("%d ", arr2[i]);
	}
	return 0;
}

3.方法二:

/1.进行分组,如何进行分组

//用按位异或(^)比较二进制的位数,相同等于 0,不同等于 1,
// 因为3^3=0,3^3^5=5,所以可以找到他们单独的数字
//如数组int arr = { 7,1,2,3,4,5,7,1,2,3 };按位异或就是
//7^1^2^3^4^5^7^1^2^3==7^7^7^1^1^2^2^3^3^4^5==4^5
//4的二进制 0100
//5的二进制 0101
//按位与后为 0001,我们进行取一如果找到了一就出来,如果没有找到n++,
// 不同的数一定能找到一个二进制不同的地方,按位于后为最右边的1
//如果我们找到二进制的第n位为一,我们就可以将4与5分开

cs 复制代码
#include<stdio.h>
void signle_dog(int arr[], int sz,int *pc, int *pb)
{
	int pos = 0;
	int ret = 0;
	//进行按异或
	for (int i = 0; i < sz; i++)
	{
		ret = ret ^ arr[i];
	}
	//求出二进制第几位是一
	for (pos = 0; pos < 32; pos++)
	{
		if (((ret >> pos) & 1) == 1)
		{
			break;
		}
	}
	//将他们进行分组
	for (int j = 0; j < sz; j++)
	{
		if (((arr[j] >> pos) & 1) == 1)
		{
			*pc = *pc ^ arr[j];
		}
		else
		{
			*pb = *pb ^ arr[j];
		}
	}

}
int main()
{
	int arr[] = { 0,1,2,3,4,5,0,1,2,3 };
	int dog1 = 0;
	int dog2 = 0;
	int sz = sizeof(arr) / sizeof(arr[0]);
	signle_dog(arr,sz,&dog1,&dog2);
	printf("%d %d\n", dog1, dog2);
	return 0;
}
相关推荐
Godspeed Zhao7 分钟前
现代智能雷达技术14——算法(0)
线性代数·算法·雷达
YOLO数据集集合14 分钟前
EvoAgent:面向PR研发治理的自进化Multi-Agent Harness系统
java·开发语言·目标检测·agent·自进化
可乐ea21 分钟前
Agent 模型分级升级路由:用置信度阈值把贵模型省下来
人工智能·算法·机器学习·结构化输出·置信度路由·模型升级路由·大模型成本优化
Navigator_Z37 分钟前
LeetCode //C - 1278. Palindrome Partitioning III
c语言·算法·leetcode
Godspeed Zhao42 分钟前
现代智能雷达技术18——算法(4)
算法
CHEEVEN_QY1 小时前
液冷板热阻计算与流阻优化的实战方法
人工智能·算法·机器学习
殷色玫瑰2 小时前
C/C++ 内存管理详解:从内存分布到 new/delete 底层原理
java·linux·c语言·c++
C++ 老炮儿的技术栈2 小时前
不一样的数值交换
数据结构·c++·人工智能·算法·c·csdn开发云
C++ 老炮儿的技术栈2 小时前
main函数之后的调用
c语言·c++·人工智能·qt·mfc·c
知识分享小能手3 小时前
C++ 学习教程,从入门到精通,C++ 友元、异常和其他特性 — 详细知识点(15)
开发语言·c++·学习