跳到主要内容
0%
约 1 分钟

CSP 201612-1中间数 C++ 100


题目

【问题描述】在一个整数序列a1, a2, …, an中,如果存在某个数,大于它的整数数量等于小于它的整数数量,则称其为中间数。在一个序列中,可能存在多个下标不相同的中间数,这些中间数的值是相同的。   给定一个整数序列,请找出这个整数序列的中间数的值。

【输入格式】输入的第一行包含了一个整数n,表示整数序列中数的个数。   第二行包含n个正整数,依次表示a1, a2, …, an。

【输出格式】 如果约定序列的中间数存在,则输出中间数的值,否则输出-1表示不存在中间数。

【样例输入】

6
2 6 5 6 3 5

【样例输出】

5

【样例说明】   比5小的数有2个,比5大的数也有2个。

代码

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n;
    int a[1005];
    int mid;
    int i,j;
    cin>>n;
    for(int i=0;i<n;i++)
    {
        cin>>a[i];
    }
    sort(a,a+n);
    mid=n/2;
    for(i=mid-1;a[i]==a[mid]&&i>=0;i--);
    for(j=mid+1;a[j]==a[mid]&&j<n;j++);
    if(i+1==n-j)
    {
        cout<<a[mid]<<endl;
    }
    else
    {
        cout<<-1<<endl;
    }
    return 0;
}

向 AI 提问(基于本文内容)

评论