我的题解:80分
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
int main() {
int n;
scanf("%d", &n);
int m[n];
for(int i = 0; i < n; i++) {
scanf("%d", &m[i]);
}
sort(m, m+n);
int l_count = 0, r_count = 0;
int flag = 0;
for(int i = 0; i < n; i++) {
for(int j = 0; j < n; j++) {
if(m[j] < m[i]) l_count++;
if(m[j] > m[i]) r_count++;
}
if(l_count == r_count && l_count != 0 && r_count != 0) {
flag = 1;
printf("%d", m[i]);
break;
}
l_count = 0;
r_count = 0;
}
if(flag == 0) printf("-1");
return 0;
}
大佬的题解:100分
/* CCF201612-1 中间数 */
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 1000;
int a[N];
int main()
{
int n, mid, leftcount, rightcount;
// 输入数据
cin >> n;
for (int i = 0; i < n; i++) cin >> a[i];
// 排序
sort(a, a + n);
// 找出中间数
mid = n / 2;
leftcount = mid;
rightcount = n - mid -1; // 为何还要-1 ,画图可知:假设n为6,则mid=3,* * + * * *(初始的leftcount和rightcount数量不等,因此rightcount还要-1)
// 去掉左边与中间相同值数的个数
for (int i = mid - 1; i >=0; i--)
if (a[i] == a[mid]) leftcount--;
else break;
// 去掉右边与中间相同值数的个数
for (int i = mid + 1; i < n; i++)
if (a[i] == a[mid]) rightcount--;
else break;
// 输出结果
if(leftcount == rightcount)
cout << a[mid] << endl;
else
cout << -1 << endl;
return 0;
}