一直有一个测试点过不了

题目:
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 
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] <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;
}

有一个测试点过不了,请指出代码的错误之处。
我知道用异或运算或比较好,所以就不要推荐我用异或运算了,直接指出这个代码哪错了

有没有可能三个数字一样,但只有其中两个数字能配对

比如
3 5 5 5

这个数据你的代码没有输出

该回答引用GPTᴼᴾᴱᴺᴬᴵ
这个错误可能是因为输入数据的格式问题导致的。
·
scanf 函数需要保证输入数据格式的正确性,否则会出现输入数据不完整或者输入数据格式不符合要求等问题。

可能是你没判断输入的n是否为奇数

题目并没有给出允许的正整数范围,int是带符号的整数,有可能输入的正整数范围超过int的范围