//这个代码有局限性,只能找到一个单身狗 //在一个整型数组中,只有一个数字出现一次,其他数组都是成对出现的, // 请找出那个只出现一次的数字 /*int findSingle(int arr[], int n) { int single=0; for (int i = 0; i < n; i++) { single ^= arr[i];*/ //single和arr[]中的每个元素进行异或,出现两个一样的arr[i] //的话,single就会被抵消成0的,但如果只出现一个,那么 //最终打印的single就是那个只出现一次的值 //single =single^ arr[i] /* 异或的规则: 不同为1,相同为0 主要思路: 如果arr[i]在数组中成对出现, 那么它与自己异或的结果为0 由于异或运算的性质,如果某个元素 arr[i] 在数组中只出现一次,那么它与 single 异或后, single 的值就会变成这个元素的值。 如果 arr[i] 在数组中出现两次或两次以上, 那么在第一次异或时 single 会得到这个元素的值, 但在第二次异或时,这个值会与自身异或, 结果为0,因此 single 的值会恢复为0。 */ /* } return single; } int main() { int arr[10] = { 1,2,3,2,1,3,9}; int n = sizeof(arr) / sizeof(arr[0]); int ret = findSingle(arr, n); printf("只出现一次的数是%d",ret); return 0; }*/