题目:
7-38 不一样的人生密码
分数 65
每个人都有一个人生密码,只有两个人的人生密码相同,才能走到一起,给出n个人的人生密码,n是奇数,其中只有一个人的人生密码是单独的,其它都是成对的,请你找出不成对的那一个。
输入格式:
多实例测试,每行第一个数为n(1<=n<=1000000),后面有n个正整数,表示n个人的人生密码 。
n值为0表示输入结束。
输出格式:
输出那个不成对的人生密码。
输入样例:
3 8 9 8
5 120 10 120 10 85
0
输出样例:
在这里给出相应的输出。例如:
9
85
我的代码:
#include <bits/stdc++.h>
using namespace std;
const int N = 1000010;
int a[N];
int n;
int main()
{
while (scanf("%d", &n), n != 0)
{
for (int i = 0; i <= n - 1; i ++)
scanf("%d", &a[i]);
sort(a, a + n);
if (n == 1) // 数组长度为1
{
cout << a[0] << endl;
continue;
}
if (a[0] != a[1]) // 第一个元素是单独的
{
cout << a[0] << endl;
continue;
}
if (a[n - 1] != a[n - 2]) // 最后一个元素是单独的
{
cout << a[n - 1] <<endl;
continue;
}
for (int i = 1; i <= n - 2; i ++) // 单独的元素在中间
if (a[i] != a[i - 1] && a[i] != a[i + 1])
{
cout << a[i] << endl;
break;
}
}
return 0;
}
有一个测试点过不了,请指出代码的错误之处。
我知道用异或运算或比较好,所以就不要推荐我用异或运算了,直接指出这个代码哪错了