异或应用

一.异或的性质

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 的值。 

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值