巧用运算符之抓获藏在情侣中的单身狗(源码在文章最后需要自取)-程序员宅基地

技术标签: VS2022 C语言  c语言  

一、题目要求

一个数组中只有两个数字是出现一次,其他所有数字都出现了两次。
编写一个函数找出这两个只出现一次的数字。
例如:
有数组的元素是:1,2,3,4,5,1,2,3,4,6
只有5和6只出现1次,要找出5和6.

二、本次目标:找到单身狗

三、方法:使用^(按位异或运算符)

int arr[] = {1,2,3,4,5,1,2,3,4,6};

int sz = sizeof(arr)/sizeof(arr[0]);

int num1 = 0;

int num2 = 0;

将数组创建出来并获取他的长度 创建两个变量用来接收找到的单身狗

Found(arr[],sz,&num1,&num2);

创建一个函数来实现目标:参数使用数组+数组长度+两个变量地址。

四、使用^(按位异或运算符)

void Found(int arr,int sz,int *num1,int *num2)
{
    //定义一个临时变量tmp = 0;对数组中的元素进行^ 就可以得到一个被两个不同数^后的结果
    int tmp = 0;
    for(int i = 0;i <sz ;i++)
    {
        tmp ^= arr[i];
    }
}

//定义一个临时变量k
	int k = 0;
	for (int i = 0; i < 32; i++)
	{
//二进制位最多有32位所以我们只循环32次
		if (((tmp >> i) & 1) != 0)
		{
//找到需要的结果就跳出循环
			k = i;
			break;
		}
	}

	*x = *y = 0;
	for (int i = 0; i < sz; i++)
	{
		if (((arr[i] >> k) & 1) != 0)
		{
			*x ^= arr[i];
		}
		else
		{
			*y ^= arr[i];
		}
	}

好了,以上就是我们找单身狗的运算符解法了,有不同见解的帅哥美女欢迎指教!

void FoundOne(int *arr,int sz,int *x,int *y)
{
	int tmp = 0;
	for (int i = 0; i < sz; i++)
	{
		tmp^= arr[i];
	}
	int k = 0;
	for (int i = 0; i < 32; i++)
	{
		if (((tmp >> i) & 1) != 0)
		{
			k = i;
			break;
		}
	}
	*x = *y = 0;
	for (int i = 0; i < sz; i++)
	{
		if (((arr[i] >> k) & 1) != 0)
		{
			*x ^= arr[i];
		}
		else
		{
			*y ^= arr[i];
		}
	}
}
int main()
{
	int arr[] = { 1,2,3,4,5,1,2,3,4,6 };
	int sz = sizeof(arr) / sizeof(arr[0]);
	int x = 0;
	int y = 0;
	FoundOne(arr,sz,&x,&y);
	printf("%d %d", x, y);
	return 0;
}

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_74202161/article/details/136067254

智能推荐

hive case when的选择顺序优先级问题_hive case when then-程序员宅基地

文章浏览阅读9.1k次,点赞6次,收藏9次。hive 中有case when 的语法是:case when 条件1 then 结果1when 条件2 then 结果2when 条件3 then 结果3......else 结果x end那如果被查询的行同时符合条件1和条件3呢?结果会是出现“结果1”还是“结果3”呢?根据测试,是符合结果1,原因是语句先“碰见” when 条件1 then 结果1这一句。如果语句改为:se..._hive case when then

中北网安实训笔记-(20200628)-域名信息、端口信息收集、nmap手册网址、敏感信息收集、GIT信息泄露_中北网络域名-程序员宅基地

文章浏览阅读232次。今天内容1.信息收集(收集目标所有可以收集的信息) 工具 客户端 网页端域名信息(子域名)站点信息端口信息敏感信息2.扫描探测(awvs xray)漏洞的入口点——————————————————PPT:域名解析过程:用户–>浏览器输入baidu.com -->浏览器DXS服务器缓存–>系统缓存dns服务器缓存C://windows/system32/drivers/etc/host–>dns服务器(发送请求)whois查询备案域名划分子域名_中北网络域名

c语言用fun函数求最大公约数,C语言程序设计第七次作业(示例代码)-程序员宅基地

文章浏览阅读707次。一、学习内容本次课学习了函数的基本知识,需要大家对如下知识点进行总结:1. 函数定义的基本格式,函数定义和函数原型(声明)的区别何在?2. 函数的调用方式有哪几种3. 什么是形参,什么是实参,函数调用时的参数传递机制是什么?二、实验内容1.定义一个判断素数的函数isprime(int n),利用该函数输出1000以内的所有素数,每行10个,最后输出一共有多少个素数。(每列对齐)2.求两个正整数的最..._调用fun函数求最大公约数

MyBatis-Plus实现多表联查(一对一,一对多使用)_mybatisplus一对多-程序员宅基地

文章浏览阅读3.8k次,点赞56次,收藏33次。在使用mybatis-plus开发需求的时候会发现对于大部分的业务场景来说都会使用到join来进行联表查询,但是mybatis-plus封装的 mapper 不支持 join,如果需要支持就需要自己手动去实现,给大家推荐一个好用的插件(Mybatis-Plus-Join(简称 MPJ)是一个 Mybatis-Plus的增强工具,在 MyBatis-Plus 的基础上只做增强不做改变,为简化开发、提高效率而生。_mybatisplus一对多

基于JAVA学生信息管理系统计算机毕业设计源码+系统+mysql数据库+lw文档+部署-程序员宅基地

文章浏览阅读106次。基于JAVA学生信息管理系统计算机毕业设计源码+系统+mysql数据库+lw文档+部署。springboot基于springboot和vue的酒店管理系统。springboot基于SpringBoot的自助旅游导航系统。springboot基于JSP的企业办公管理系统设计与实现。JSP宠物食品店系统的设计与实现sqlserver。ssm基于Java的幼儿早教系统软件的设计与实现。ssm基于vue的健康餐饮管理系统的设计与实现。ssm基于JAVA的求职招聘网站的设计与实现。

Nginx_Ubuntu-程序员宅基地

文章浏览阅读113次。一. 基本步骤  1.1环境准备    开始前,请确认gcc g++开发类库是否装好,默认已经安装。    注:等待linux下载更新功能准备好了 重启系统 在执行下载安装命令,如执行命令没有问题可以继续往下走      1. 最小Ubuntu安装插件      1. 需要安装        sudo apt-get install build-essen..._snail mock

随便推点

highlight.js网页代码高亮插件左侧怎么展示行号_highlightjs/vue-plugin 行号-程序员宅基地

文章浏览阅读288次。前几天分享了一篇网页代码高亮插件highlight.js,效果还不错,因为highlight.js本身没有行号展示,对于观感和体验上来源还是有点不太友好哈,恩。这几天越看越难受,忍不了还是弄一下吧。操作完成,上面代码框展示的就是配置后的效果了,因为我不大喜欢侧那块灰色的条,所以在css里面注释了,因人而异吧,喜欢的可以自己打开试下效果。_highlightjs/vue-plugin 行号

xp系统怎么创建新宽带连接服务器地址,XP宽带连接怎么创建?-程序员宅基地

文章浏览阅读1.6k次。本文介绍了XP系统上创建宽带连接的方法;如果用户办理的是PPPoE(ADSL虚拟拨号)宽带业务,在未使用无线路由器的情况下,需要通过电脑上的“宽带连接”来拨号上网;如果有路由器,则不需要通过宽带连接来拨号上网了。下面本文详细介绍XP系统上创建宽带连接的方法。XP创建宽带连接1、右击“网上邻居”选择“属性”XP系统上网上邻居属性2、选择“创建一个新的连接”,如下图所示选择创建一个新的连接3、直接点击..._xp系统新设置宽带连接

.NET开发语言C++.NET, C#, VB.NET电子资料汇总-程序员宅基地

文章浏览阅读103次。Pro LINQ:Language Integrated Query in C# 2008MS Press - Introducing Microsoft LINQLINQ for Visual C# 2005 (07年6月出版)LINQ for VB 2005 (07年6月最新PDF文字版)Manning:LINQ in ActionPro C# 2008..._c++ c# vb.net

confluence搭建部署_ata confluence-程序员宅基地

文章浏览阅读1.1k次。confluence企业wiki搭建部署_ata confluence

SpringCloud与SpringBoot版本对应关系_springboot 2.1.1 对于的cloud-程序员宅基地

文章浏览阅读830次。今天在创建SpringCloud项目过程中遇到了一个坑:当我将SpringCloud项目架子搭好之后,启动Eureka的时候报错(具体的错误提示忘记截图了),然后对问题摸索了好久之后才发现是SpringBoot与SpringCloud对应的版本问题。由于我项目中SpringBoot项目的版本用的是2.2.X,而SpringCloud的版本用的是 Greenwich.SR2所以造成了报错导致Eur..._springboot 2.1.1 对于的cloud

如何恢复硬盘数据?简单解决问题_磁盘恢复 csdn-程序员宅基地

文章浏览阅读467次。无论是工作中还是生活里都离不开电脑,因为电脑可以用来编辑成我们需要的文件,还可以存储_磁盘恢复 csdn

推荐文章

热门文章

相关标签