C语言编程 求两组整数的异或集

Python016

C语言编程 求两组整数的异或集,第1张

先看paixu函数……其实你知道a数组有多长,应该把这个长度当做输入传给paixu函数,让它只对这些数字排序。否则后面的0也都参与了排序,肯定会出错。

shanshu函数……好像问题不大……但是还是应该只对数组范围内的进行操作。

其实这种数组删数的操作太复杂,应该尽量避免,而且不要题让你干嘛你就干嘛,太耿直……

比如这里,排完序之后,我们不用删除数字。因为我们知道数组里一共有i个数,可以这么写:

for (k=0 k<i )

{

    if (k == i-1 || a[k] != a[k+1])

    {

        printf("%d ", a[k])

        k++

    }

    else

        k+=2

}

直接就搞定了……

首先,我们看一下异或的原理:

a = 3 ^ 5

3的二进制是0011,5的二进制是0101。异或发现两者的不同之处,所以a最终为0110b(4)。

了解了异或的基本原理后,接下来看上述的代码。

a^=b

这一句使得a被赋值为“数值a”与“数值b”的“差异值”。

然后:b^=a

这一句用异或利用“差异值”来还原a的数值,并赋值给b。此时b等于a先前的数值。

最后一句:a^=b

因为a仍然保存着“差异值”,这一句通过异或使得b的初始值被还原,并赋值给a。

。。。。。

这样,异或就将a与b的数值“巧妙”地交换了……

我也是百度的,和楼主一起学习…………