補充:異或,可以理解為不進製加法: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...