有關異或的題目

2021-10-21 11:47:05 字數 3126 閱讀 2920

異或:相同數字得到0,任何數與零異或,最終得到自身,同時異或滿**換律。

# include

# include

intmain()

;int result =0;

for(

int j =

0; j <=

sizeof

(a)/4-

1;++j)

printf

("%d"

,result)

;}

首先將所有的數異或,因為有兩個數出現一次,所以最終得到的異或結果,實際上是兩個出現一次的數的異或結果,由最低位為1可以得知,出現一次的兩個數的這一位一定不同,因些拿到該與所有的數按位與,為1的放在一堆,為0的放在另一堆,為0的放在另一堆,就能將兩個出現一次的數分開,然後對兩堆各自異或,就能找到出現一次的兩個數。

ps:乙個數與自身的相反數進行異或到得這個數的最低位的1

# include

# include

intmain()

;int result0 =0;

int result1 =0;

int n =0;

for(

int j =

0; j <

sizeof

(arr)

/sizeof

(int);

++j)

n = n &(-

1* n)

;//找到兩個只出現一次數的異或值的最低位的1

for(

int j =

0; j <

sizeof

(arr)

/sizeof

(int);

++j)

else

}printf

("%d %d "

,result0,result1)

;}

由於3個數字出現一次,其他數字均出現兩次,因此可以得到n一定為奇數。

3個只出現一次的數字,它們的bit位,肯定不可以全部相同,也就是說,雖然有些bit位上的數可能相等,但肯定至少存在某個bit位,在這3個數中,有兩個數的該bit位為1,乙個數的該bit為0,或者兩個數的該bit位為0,乙個數的該bit位為1。

我們可以通過掃瞄int的所有bi位,掃瞄每個bit位時,遍歷陣列,如果能找出符合上面條件的,就可以找出其中乙個只出現一次的數字,該數字與另外兩個只出現一次的數的bit位不同。通過bit位不同分成兩堆,對每堆進行異或,如果異或結果表明兩堆均不為零,那麼說明分開了,偶數個數的那堆有兩個數,奇數個數的那堆有乙個數。

# include

# include

# include

#define n 9

void

findtwonum

(int

* arr,

int result,

int first)

else}if

(split&first)

else

printf

("find2=%d,find3=%d"

,find1,find2);}

intmain()

;int heapresult1, heapresult2;

int heapcount1,heapcount2;

//每一堆元素的數目

int split =

1,i,j;

for(j =

0; j <32;

++j)

else

}//分堆完成後再進行判斷是否是有效的分堆

if(heapcount1 %2==

0&& heapresult1 !=0)

if(heapcount2 %2==

0&& heapresult2 !=0)

}}

# include

# include

void

change

(int

**pa,

int*pb)

//在子函式需要修改主函式內某個一級指標,需要二級指標

intmain()

# include

# include

# include

#define n 5

void

print

(char

(*p)[10

])}void

printpointerarr

(char

**p)

}//二級指標的初始化是某個一級指標變數取位址

intmain()

;int i, j;

int*ptmp;

char

**p2=

(char**

)malloc

(sizeof

(char*)

*n);

//for

(i =

0; i < n;

++i)

print

(b);

for(i = n; i >

1;i--)}

}printf

("------------------------------------\n");

printpointerarr

(p2)

;printf

("------------------------------------\n");

print

(b);

system

("pause");

}

# include

# include

# include

voidb(

)voida(

void

(*p)()

)int

main()

python 有關python的異或操作的分析

今天在刷leetcode的題目中,提及了有關xor,也就是異或的操作。由於自己不太熟悉,因此對異或以及python中的異或操作進行一下分析。1 什麼是異或?邏輯上的異或,通俗點就是兩者相同返回0,兩者不同返回1。比如1 0 1,1 1 0,0 0 0。2 python上的異或 舉個例子很好理解 5 ...

異或 異或相關

感謝 morning glory 贊助 異或異 或 de scri ptio ndes crip tion 給定 l,r l,r,求 i lr j lr i ji l r j l r i jl,r 1 09l,r 1 09 s olut ions olut ion 假設l 1,r 4l 1,r 4,...

異或運算 有趣的異或運算

異或運算可以看做是沒有進製的加法,按位異或運算,相同為0,不同為1。0 0 0 0 1 1 1 0 1 1 1 0 觀察運算結果我們發現,當與0做異或運算時,另一元值不變 而與1做異或運算時,另一元值值取反。根據以上異或運算的特徵,可以有以下用途,除方便直觀外,運算效能也更加優異。1 變數重置0 假...