先看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
然后:b^=a
这一句用异或利用“差异值”来还原a的数值,并赋值给b。此时b等于a先前的数值。
最后一句:a^=b
因为a仍然保存着“差异值”,这一句通过异或使得b的初始值被还原,并赋值给a。
。。。。。
这样,异或就将a与b的数值“巧妙”地交换了……
我也是百度的,和楼主一起学习…………