C语言:一个数组中只有两个数字是出现一次
Posted Duikerdd
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言:一个数组中只有两个数字是出现一次相关的知识,希望对你有一定的参考价值。
1 //1.一个数组中只有两个数字是出现一次, 2 //其他所有数字都出现了两次。 3 //找出这两个数字,编程实现。a 4 5 //^=单独两个数的^结果 6 //单独出现的两个数不同位的标记 7 //position: ^结果中第一个出现1的位置 8 //position位两个数肯定有一个为0 ,一个为1 9 //把数组分成两部分 10 //1:position为1 11 //2:position为0 12 //每一部分都有一个只出现一次的数字,其他的都是成对出现 13 //每一部分^结果为单独出现的数字 14 #include<stdio.h> 15 #include<stdlib.h> 16 17 int main() 18 { 19 int arr[] = { 1, 3, 4, 5, 6, 6, 5, 1 }; 20 int len = sizeof(arr) / sizeof(arr[0]); 21 int ret = 0; 22 int i = 0; 23 int pos = 0; 24 int x = 0; 25 int y = 0; 26 //整体^一次 27 for (i = 0; i < len; i++) 28 { 29 ret ^= arr[i]; 30 } 31 //寻找第一个1的位置 32 for (i = 0; i < 32; i++) 33 { 34 if ((ret >> i) & 1 == 1) 35 { 36 pos = i; 37 break; 38 } 39 } 40 //把数组分成两部分 41 for (i = 0; i < len; i++) 42 { 43 //如果pos位置为1 44 if (((arr[i] >> pos)&1)==1) 45 { 46 x ^= arr[i]; 47 } 48 //位置为0 49 else 50 { 51 y ^= arr[i]; 52 } 53 } 54 printf("%d %d", x, y); 55 system("pause"); 56 return 0; 57 }
以上是关于C语言:一个数组中只有两个数字是出现一次的主要内容,如果未能解决你的问题,请参考以下文章