一.异或的性质
1.分配率:(A^B)^C = A^(B^C)
举例:
8:1000 6:0110 3:0011
(8^6)^3
(1000)^(0110)=(1110)
(1110)^(0011)=(1101)
8^(6^3)
(0110)^(0011)=(0101)
(0101)^(1000)=(1101)
2.N^0=N
3.N^N=0
二.应用:
1.实现数值交换
A=A^B;
B=A^B;
A=A^B;
以上三步就实现了A与B数值的交换。
解释:
令A=甲,B=乙
A=A^B 实现了 A=甲^乙,
B=A^B B=甲^乙^乙=甲^(乙^乙)=甲^0=甲,实现了B=甲
A=A^B A=甲^乙^甲=(甲^甲)^乙=0^乙=乙,实现了A=乙
2.奇数个 数字的查找
在一串字符中,有一个数字 t 有奇数个,其他数字都是偶数个,求数字 t 的值。
输入样例:
13
1 2 3 4 2 4 1 1 3 3 2 2 3
输出样例:
1
解题代码:
# include <iostream>
using namespace std;
int main()
{
int n;
cin >> n;
int a[20];
for(int i=0;i<n;i++)
{
cin >> a[i];
}
int t = 0;
for(int i=0;i<n;i++)
{
t = t ^ a[i]; //t与数组中的每一个数相异或,根据异或的性质就会的到奇数个的数
}
cout << t << endl;
}
在一串字符中,有两个数字 a ,b 有奇数个,其他数字都是偶数个,求数字 a,b 的值。