巧用“异或”

  “异或”运算是C语言中一种比较冷僻的运算,除了一些特定领域的问题(如加密、图像处理等),较少有恰当的应用场合。以至于大多数C语言书在讲到异或这个运算时,一般都干巴巴的很生硬。

  日前,看到 人人校招笔试题 中的对某问题的求解,发现异或在某些特定场合有非常奇妙的、恰如其分的甚至可说是舍我其谁的应用。

  人人校招笔试题 中的问题是这样的:

  给定一个有序数组a,长度为len,和一个数x,,判断A数组里面是否存在两个数,他们的和为x,bool judge(int *a, int len, int x),存在返回true,不存在则返回false。

  这个问题并不太难,除了博主给出了代码,另有网友给出了另外两种代码。

代码1

#include <stdio.h>#include <stdlib.h>#include <string.h>int Judge(int *a, int len, int x){int Ascending = 0;//为1表示升序,否则降序Ascending = a[1] > a[0] ? 1 : 0;int *CopyA = (int *)malloc(sizeof(int) * len);memset(CopyA, 0, sizeof(int) * len);icount = 0;for(icount = 0; icount < len; icount++){CopyA[icount] = x – a[icount];}i = len – 1, j = 0;while(i >= 0 && j < len){if(a[i] > CopyA[j]){switch(Ascending){: i–; :break;}}else if(a[i] == CopyA[j]){return 1;}else{switch(Ascending){: j++; :break;}}}return 0;}int main(){int a[] = {59,41,21,10,5};int len = 5;int x = 190;switch(Judge(a, len, x)){, x);break;, x);break;default : break;}return 0;}一个人最大的破产是绝望,最大的资产是希望。

巧用“异或”

相关文章:

你感兴趣的文章:

标签云: