一个数组中所有的数都是成对出现的只有一个或者两个数字是单独的,求这个数
来源:互联网 发布:软件做成启动项 编辑:程序博客网 时间:2024/05/18 01:54
如果只有一个数,那么我们可以用按位亦或(^)来得到,代码如下:
#include<stdio.h>int main(){int arr[] = { 1, 1, 2, 2, 3, 3, 4 };int size = sizeof(arr) / sizeof(int);int num = 0;for (int i = 0; i < size; i++){num ^= arr[i];}printf("%d\n", num);system("pause");return 0;}
如果是两个数,那么我们可以对这个数组进行拆分,然后分别与0亦或,其拆分思想就是把数组所有的数全部亦或,所得到的的结果其本质就是那两个单独出现的数的亦或结果,由于亦或其本质就是相同为0,相异为1,所以这个数每个为1的位就是其不同的位,我们可以找出它第一个为1的位进行标记,把为一的亦或的一起,为0的亦或到一起,所得的结果就是两个数,实现代码如下:
#include<stdio.h>void find_num(int *arr, int size)//其实现功能进行函数封装,因为是要返回两个值,C语言 //实现故吧这两个值打印出来{int num1 = 0;int num2 = 0;int end_num = 0;int flag = 0;for (int i = 0; i < size; i++){end_num ^= *(arr + i);}while (!(end_num & 1)){flag++;end_num >>= 1;}for (int i = 0; i < size; i++){int tmp = arr[i] >> flag;if (tmp & 1){num1 ^= arr[i];}else{num2 ^= arr[i];}}printf("num1=%d\nnum2=%d\n", num1, num2);}int main()//验证阶段{int arr[] = { 1, 1, 2, 2, 3, 3, 4, 5 };int size = sizeof(arr) / sizeof(arr[0]);find_num(arr,size);system("pause");return 0;}
如有什么错误不足,希望批评指正
本文出自 “pawnsir的IT之路” 博客,请务必保留此出处http://10743407.blog.51cto.com/10733407/1713119
0 0
- 一个数组中所有的数都是成对出现的只有一个或者两个数字是单独的,求这个数
- 一个数组中只有两个数字单独出现,其余数字都是成对出现的,请找出这两个数。
- 一个数组中只有两个数字是出现一次的,其他数字都是成对出现,找出这两个数字
- 【C语言】在两个数成对出现的数组中找到一个单独的数。
- 一组数据中只有一个数字出现了一次。其他所有数字都是成对出现的。请找出这个数字。
- 一组数据中只有一个数字出现一次 ;其他所有数字都是成对出现的请找出这个数字。
- 一组数据中只有一个数字出现了一次。其他所有数字都是成对出现的。 请找出这个数字。
- 一组数据中只有一个数字出现了一次。其他所有数字都是成对出现的。 请找出这个数字。
- 一组数据中只有一个数字出现了一次,其他所有数字都是成对出现的。 请找出这个数字。
- 一组数据中只有一个数字出现了一次。其他所有数字都是成对出现的,求这个数字。(使用位运算)
- 一组数据中只有一个数字出现了一次。 其他所有数字都是成对出现的。请找出这个数字(数组指针的方法)
- 【c语言】给一组数,只有一个数只出现了一次,其他所有数都是成对出现的。找出这个数
- 一组数据中只有一个数字出现了一次。其他所有数字都是成对出现的。
- 面试题:元素为32位整数的数组中只有一个数字出现2次,其余都是出现3次,求这个数
- 一组数据中只有一个数字出现了一次和 一组数据中只有两个个数字出现了一次其他所有数字都是成对出现的。请找出这个数字
- 求一个整型数组中,只有一个数出现一次,其他的数都出现2次,求这个数?
- 【C语言】一组数据中只有一个数字出现了一次。 其他所有数字都是成对出现的。请找出这个数字。(使用位运算)
- C语言:一组数据中只有一个数字出现了一次。其他所有数字都是成对出现的。请找出这个数字。(
- 顺序表应用6:有序顺序表查询
- 递归调用的实例讲解
- 递归调用实例分析2.在函数中间的递归与在函数尾部的递归
- c语言不定参数与printf函数的实现
- C语言实现数组的奇偶排序
- 一个数组中所有的数都是成对出现的只有一个或者两个数字是单独的,求这个数
- C语言中模拟实现strcpy,strstr,strcat函数
- C语言模拟实现memcpy,memmove函数
- C语言中的指针与数组的关联1
- C语言中指针与函数的关联2(数组的降级)
- 指针与数组的关联3 --声明
- 模拟实现C语言strncpy.strncat.strncmp函数
- C语言模拟实现memset.memcmp函数
- C语言用结构体写一个通讯录