C——找单身狗2

2024-04-08 11:28
文章标签 单身

本文主要是介绍C——找单身狗2,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目内容:

在一个数组中,室友两个数字出现了一次,其他所有数字都出现了两次。找出只出现一次的数字。

如:1,2,3,4,5,1,2,3,4,6             5 和6都只出现了一次,找出5和6打印出来

 解题思路:

这里还是要用到异或运算符 ^来解决。不过和单身狗1不一样的是,整个数组异或下来,会出现一个别的值,是由5^6得到的。这里我们找新得到的值的二进制位的1在哪里。

注意,异或运算符是两个数的二进制位对应位相同结果为1,不同为0 ,可以用这点来将两个不同的数字分成两个不同的组,然后在分别异或每个组。

 1、找出整体异或的结果

int tmp = 0;
int i = 0;
//将整个数组异或起来,得到两个不同数字的异或结果
for (i = 0; i < n; i++)
{tmp ^= arr1[i];
}

2、找到tmp中,二进制为1 的某一位k

tmp 可能是 0001  0010 0100,所以我们要用到右移运算符 >>

int k = 0;
for (i = 0; i < 32; i++)
{if (((tmp >> i) & 1) != 0){k = i;break;}
}

3、将k位上为1的分为一组遍历异或,最后的值存储到p1或p2中

* p1 = 0;
* p2 = 0;
for (i = 0; i < n; i++)
{if (((arr1[i] >> k) & 1) != 0){*p1 ^= arr1[i];}else{*p2 = arr1[i];}
}

最后来看看完整代码吧

#include <stdio.h>void Fund(int arr1[], int n, int* p1, int* p2)
{int tmp = 0;int i = 0;//将整个数组异或起来,得到两个不同数字的异或结果for (i = 0; i < n; i++){tmp ^= arr1[i];}//2、找到tmp中,二进制为1 的某一位kint k = 0;for (i = 0; i < 32; i++){if (((tmp >> i) & 1) != 0){k = i;break;}}//3、将k位上为1的分为一组遍历异或,最后的值存储到p1或p2中* p1 = 0;* p2 = 0;for (i = 0; i < n; i++){if (((arr1[i] >> k) & 1) != 0){*p1 ^= arr1[i];}else{*p2 = arr1[i];}}
}int main()
{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;Fund(arr, sz, &num1, &num2);printf("%d %d\n", num1, num2);return 0;
}

结果:

这篇关于C——找单身狗2的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/885455

相关文章

ctfshow web 单身杯

web签到 <?phperror_reporting(0);highlight_file(__FILE__);$file = $_POST['file'];if(isset($file)){if(strrev($file)==$file){ //翻转函数include $file;}} 要进行反转并且包含文件用data协议 自己写不好写可以用函数帮你翻转 <?php $a='data

算法解析——单身狗问题

欢迎来到博主的专栏:算法解析 博主ID代码小豪 文章目录 什么是单身狗问题leetcode_136——只出现一次的数字I使用位运算解决单身狗问题。 leetcode_137——只出现一次的数字II统计二进制数解决单身狗问题leetcode_260 只出现一次数字III分区域按位异或解决问题。 总结 什么是单身狗问题 最近也是度过了5.20和儿童节这两个单身狗受难日,由于这两天学

相亲贴,单身小姐姐你在哪里,我是书豪,我在等你!

“ 阅读本文大概需要 5 分钟。 ” 这篇文章是为我的一位朋友「书豪」转的。 他是一名程序员,现在 24 岁,工作在上海,从事数据分析相关的工作,已经出版了一本书《R数据科学实战:工具详解与案例分析》,平时他喜欢爬山、健身等等。工作踏实,非常优秀。 不过,他还没有女朋友,想找到属于自己的另一半。 下面是他为自己写的相亲贴,单身小姐姐有意向欢迎联系他呀! 笔者简介Int

【JAVA】实现只有一个窗口弹出的底层逻辑——单身模式

目录 背景说明 代码实现  手写笔记 背景说明 有的时候,当你点击一个选项时会弹出来多个窗口,而有的时候只会弹出一个。 实际上,弹出多个窗口就是创建了多个相同的对象,而只弹出一个就是我们今天即将分享的单身模式——一个类只产生一个对象 代码实现 class Singleton{private Singleton(){}private static Singleton

PyCon上海倒计时,单身的策划开始搞事情了!!!

距离本次上海的PyCon大会开始仅剩下两周的时间了,这次出席的嘉宾可谓是天神级别的人物,可见主办方这次多用心 但是,今天我们要说的不是这个!!! 而是PyCon又推出了一个重磅活动: 相亲! 相亲!! 相亲!!! 我简直不敢相信自己的眼睛!!! 我来参加PyCon大会 而你却跟我提这个 作为一个Python的技术爱好者 我是拒绝的!! 我心里只有python! 你怎么

非单身勿点,这里是单身汪专属情人节~

当你打开这个页面,机智的点点猜想——很有可能你正在过一个没有情人的情人节,不如就和同样单身的红数点(下图此人)在这个虐狗的日子里相依为命吧!     如果你拥有满身的浪漫细菌无处释放,不如在这里跟数据派的小伙伴儿表白一番喽,(注:和数据派相关的人物均可,比如某场讲座坐在你旁边的那个他(她)、某位演讲大咖、某位工作人员等等。格式:表白XXX+你想说的话) 小编将会精心挑选表白最真挚的三位留

单身女孩的心事26岁的我在寻找另一半微信脱单群

在繁华的都市中,有一个名叫小雅的26岁女孩,她每天穿梭在拥挤的人群中,过着看似平凡却充满期待的生活。小雅是一个性格开朗、独立自主的女孩,她有着稳定的工作和不错的收入,朋友们都羡慕她的生活。然而,小雅心中却有一个难以言说的秘密——她渴望找到那个能与她共度余生的另一半。 点这里进群     小雅并不是一个急于结婚的人,她相信缘分自然会到来。但是,随着年龄的增长,她越来越感受到身边人的关心和催

C语言——找单身狗1

题目描述: 在一个整形数组中,只有一个数字出现一次,其他数组都是成对出现的,找出那个只出现一次的数字。 例如: 数组中:1,2,3,4,5,4,3,2,1,只有5出现一次,其他数字都出现2次  解法思路: 可以使用按位异或来解决。异或运算符 ^ ,如果两个数的二进制数相对应的位不同,结果为0,相同则为1。 例如:2 的二进制数为0010,3 的二进制数为0011,那么2^3 结果为 0

趣图:单身程序员狗的一天

扩展阅读 论程序员的思维逻辑有多强大! 一位单身程序猿的幸福回忆 趣图:这就是为什么程序员没有女朋友的原因!!