标签:
// 给一组数,有两个数只出现了一次,其他所有数都是成对出现的。找出这两个数。 #include <stdio.h> void find_two_diff(int arr[], int len, int *num1, int *num2)//设置两个返回型参数 { int i = 0; int ret = 0; int pos = 1; *num1 = 0; *num2 = 0; for (i = 0; i < len; ++i) { ret ^= arr[i]; } // 找出ret中1的位置 while (ret) { if ((ret & 1) == 1) { break; } else { pos++; ret >>= 1; } } // 找对应位是1的 for (i = 0; i < len; ++i) { if (((1 << (pos - 1)) & arr[i]) == 0) { *num1 ^= arr[i]; } else { *num2 ^= arr[i]; } } } int main() { int arr[] = { 1, 2, 3, 1, 2, 3, 4, 5 }; int ret1; int ret2; find_two_diff(arr, sizeof(arr) / sizeof(arr[0]), &ret1, &ret2); printf("num1 = %d, num2 = %d\n", ret1, ret2); return 0; } <img src="http://img.blog.csdn.net/20150630160129763?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemhhb3lhcWlhbjU1Mg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
版权声明:本文为博主原创文章,未经博主允许不得转载。
【c语言】 给一组数,有两个数只出现了一次,其他所有数都是成对出现的。找出这两个数
标签:
原文地址:http://blog.csdn.net/zhaoyaqian552/article/details/46696941