日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

异或方式找到一组数组中不重复的两个数(同班同学方法)

發(fā)布時間:2025/3/19 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 异或方式找到一组数组中不重复的两个数(同班同学方法) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

源代碼如下:

#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]);

?

/*這一塊用于獲得異或的結(jié)果n*/

????for?(i?= 0; i?< size; i++)

????{

????????n?= n?^ a[i];

????}

????printf("n = %d\n", n);

?

/*下面的這一塊用于獲得,比如在這題,46異或的結(jié)果為2,那么其中就會4&2就是0,而6&2就不是0,那么就可以成功把46區(qū)分開。當(dāng)然對于510,異或結(jié)果是00001111,但只要我們?nèi)〕銎渲幸粋€比特就好,比如1,5&1不是0,而10&10.也可以成功區(qū)分開。所以下面的代碼就是取出第一個1*/

????while?((n?& (1 << count)) == 0)

????{

????????count++;

????}

????printf("%d", (1 << count));

????

/*成功獲得00000010以后,就可以獲得結(jié)果了*/

????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 == 05&3一定要加(),也就是改成if ((5&3) == 0)。

?

?

?

總結(jié)

以上是生活随笔為你收集整理的异或方式找到一组数组中不重复的两个数(同班同学方法)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。