AC2656 2023-03-09 08:59 采纳率: 81.8%
浏览 87
已结题

一直有一个测试点过不了

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

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

  • 写回答

5条回答 默认 最新

  • tanjunming2020 2023-03-09 09:12
    关注

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

    比如
    3 5 5 5

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

问题事件

  • 系统已结题 3月21日
  • 已采纳回答 3月13日
  • 创建了问题 3月9日

悬赏问题

  • ¥15 HLs设计手写数字识别程序编译通不过
  • ¥15 Stata外部命令安装问题求帮助!
  • ¥15 从键盘随机输入A-H中的一串字符串,用七段数码管方法进行绘制。提交代码及运行截图。
  • ¥15 TYPCE母转母,插入认方向
  • ¥15 如何用python向钉钉机器人发送可以放大的图片?
  • ¥15 matlab(相关搜索:紧聚焦)
  • ¥15 基于51单片机的厨房煤气泄露检测报警系统设计
  • ¥15 Arduino无法同时连接多个hx711模块,如何解决?
  • ¥50 需求一个up主付费课程
  • ¥20 模型在y分布之外的数据上预测能力不好如何解决