异或方式找到一组数组中不重复的两个数(同班同学方法)
源代碼如下:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
?
int?main()
{
????int?a[] = {1,2,3,4,6,3,2,1};
????int?n?= 0, i, size, count?= 0, bit?= 0;
????int?result1, result2;
?
size?= sizeof(a) / sizeof(a[0]);
?
/*這一塊用于獲得異或的結果n*/
????for?(i?= 0; i?< size; i++)
????{
????????n?= n?^ a[i];
????}
????printf("n = %d\n", n);
?
/*下面的這一塊用于獲得,比如在這題,4和6異或的結果為2,那么其中就會4&2就是0,而6&2就不是0,那么就可以成功把4和6區分開。當然對于5和10,異或結果是00001111,但只要我們取出其中一個比特就好,比如1,5&1不是0,而10&1是0.也可以成功區分開。所以下面的代碼就是取出第一個1*/
????while?((n?& (1 << count)) == 0)
????{
????????count++;
????}
????printf("%d", (1 << count));
????
/*成功獲得00000010以后,就可以獲得結果了*/
????result1?= result2?= 0;
????for?(i?= 0; i?< size; i++)
????{
????????if?((a[i] & (1 << count)) == 0)
????????{
????????????result1?= result1?^ a[i];
????????}
????????else
????????{
????????????result2?= result2?^ a[i];
????????}
????}
????printf("the result is %d and %d.\n", result1, result2);
?
????return?0;
}
?
注意點?if (5&3 == 0,5&3一定要加(),也就是改成if ((5&3) == 0)。
?
?
?
總結
以上是生活随笔為你收集整理的异或方式找到一组数组中不重复的两个数(同班同学方法)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 笔试训练1 知识点整理
- 下一篇: 笔试训练第二次知识点汇总