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 }

猜你喜欢

转载自www.cnblogs.com/Duikerdd/p/9940819.html
今日推荐