当前位置: 首页 > article >正文

C++使用异或找出数组中奇数次出现的数据

一、问题描述
        现有一个数组,数组中的数成对出现,其中有两个数,奇数次出现。现编写程序,使用异或的方法找出数组中这两个数。
        

#include <iostream>
#include <vector>



int main() {

	std::vector<int> arry = { 1,2,3,1  };


	int err = 0;

	//第一步找出两个数异或后的值
	for (auto it : arry) {
		err = err^ it;
	}

	
	//因为异或是不同为1,所以找到最右边的1,即这个位两个数中一个为0,一个为1,
	//取err的反码,然后加1,找到最右边的为1的值
	int rightOne = err & (~err + 1);		//结果格式为000010这种格式,用这种格式继续后面的操作

	

	//第二步,通过上面的1,为差别,找到相与为0的数找到两个中的一个。
	int onlyOne = 0;
	for (auto it : arry) {
		if((it & rightOne) == 0)
			onlyOne = onlyOne ^ it;
	}

	std::cout << "第一个数是 " << onlyOne << std::endl;
	std::cout << "第二个数是" << (onlyOne ^ err) << std::endl;


	int  a = 10;
	int b = 3;

	int c = a ^ b;				//a与b,进去c
		
	int d = a ^ c;				//a与c,从c里面出来。

	std::cout << "b是" << d << std::endl;



	return 0;
}


http://www.kler.cn/a/518317.html

相关文章:

  • PageView组件的功能和用法
  • Facebook广告点击率CTR太低 如何优化
  • shell编程-awk使用系统学习
  • 如何部署 Flask 应用程序到生产环境?
  • 人工智能的未来:AGI、ACI与ASI的探索
  • Kimi k1.5:基于大语言模型的多模态强化学习训练技术报告
  • Base64编码解密:解码下载邀请
  • 使用 Tauri 开发桌面应用程序:新一代的轻量解决方案
  • 编写python 后端 vscode 安装插件大全
  • DDD架构实战第七讲总结:分层模型和代码组织
  • Redis内存面试与分析
  • 如何在 Windows 上安装 MySQL(保姆级教程2024版)
  • RocketMQ底层哪里用了Netty
  • 51单片机(四)定时器
  • AI News(1/21/2025):OpenAI 安全疏忽:ChatGPT漏洞引发DDoS风险/OpenAI 代理工具即将发布
  • 25美赛ABCDEF题详细建模过程+可视化图表+参考论文+写作模版+数据预处理
  • 「全网最细 + 实战源码案例」设计模式——抽象工厂模式
  • 利用大语言模型(LLM)增强软件测试自动化的最佳实践
  • 【韩顺平Java笔记】第8章:面向对象编程(中级部分)【354-358】
  • AI模型提示词(prompt)优化-实战(一)