方法一
通过位运算符的性质来实现
void Search1(int* arr, int len) {
int num[2];
int tmp;
int i;
int j;
int count = 0;
for (i = 0; i < len; ++i) {
if (*(arr + i) != -1) {
tmp = *(arr + i);
for (j = i + 1; j < len; ++j) {
if (*(arr + j) != -1) {
if ((tmp ^ *(arr + j)) == 0) {
*(arr + j) = -1;
break;
}
}
}
if (j == len) {
num[count++] = tmp;
}
}
}
printf("只出现一次的两个数分别为:%d %d\n", num[0], num[1]);
}
方法二
通过设置标志来实现
void Search2(int* arr, int len) {
int i;
int j;
int flag = 0;
printf("只出现一次的两个数为:");
for (i = 0; i < len; ++i) {
flag = 0;
for (j = 0; j < len; ++j) {
if (arr[i] == arr[j] && i != j) {
flag = 1;
}
}
if (flag == 0) {
printf("%d ", arr[i]);
}
}
printf("\n");
}
测试
int main() {
int arr[] = {1, 3, 5, 7 ,3 , 5, 6, 1};
int len = sizeof(arr) / sizeof(int);
//Search(arr, len);
Search2(arr, len);
return 0;
}