一 位運算的奇巧淫技

2021-09-10 14:49:28 字數 868 閱讀 5627

補充:異或,可以理解為不進製加法:1+1=0,0+0=0,1+0=1

性質:1、交換律,可任意交換運算因子的位置,結果不變

2、結合律(即(a^b)^c==a^(b^c))

3、對於任何數x,都有x^x=0,x^0=x

4、自反性a^b^b=a^0=a,連續和同乙個因子做異或運算,最終結果為自己

題1:找出唯一成對的數

1-1000這1000個數放在含有1001個元素的陣列中,只有唯一的乙個元素值重複,其他均只出現一次。每個陣列元素只能訪問一次,設計乙個演算法,將它找出來;不同輔助儲存空間,能否設計乙個演算法實現?

解題思路:

由上述性質3可知,任何數與自身異或為0,因此可以通過將這些數全部與自身異或一遍,結果即為那個奇數個的重複數。

**:#include#define random(x)(rand()%x)

using namespace std;

int main()

int main()

; int len=13;

int k = 3;

//儲存二進位制數中最大的長度

int max_len=0;

int arr2[13][5]=;

//將每個數字的二進位制儲存到二維陣列中

for(int i=0;imax_len)

} //定義接收k進製的結果陣列並初始化

int *resarr=new int[max_len];

for (int i = 0; i < max_len; i ++)

//將所有二進位制數進行不進製加法

for(int i=0;ips:出現的小知識點總結:

位運算的奇巧淫技

1.在處理整形數值時,可以直接對組成整形數值的各個位進行操作。這意味著可以使用遮蔽技術獲得整數中的各個位。2.與 或 異或 非 取反 3.和 運算子將二進位制位進行右移或者左移操作。4.運算子將用0填充高位 運算子用符號位填充高位,沒有 運算子。5.對於int型,1 35與1 3是相同的,而左邊的運...

貪心的奇巧淫技 Join the Strings

題目大意 已知n個長度不同的字串,求字典序最小的方案.分析 直接貪心是不對的,因為按字典序排序的話會出現這種情況 bt,btb,此時直接貪心就成了btbtb,明顯btbbt更優.所以按 a b,b a 判斷就可以了 機智 code include include include include in...

演算法很美第一章 位運算的奇巧淫技

知識點 a a 0 a 0 a 乙個數與0進行按位異或,結果是他自己 對乙個序列進行按位異或,可以消除掉序列中的重複項,比如 a a b c c b 根據第1 2條規則 對乙個序列補一下,就可以將不重複的元素變成重複的元素,重複的元素變成不重複的,從而可以找到原本序列中重複項。比如原本是 a b c...