思路:
1。對輸入數組從小到大排序
2。從中間開始向兩邊擴展,直到擴展到數組邊界或到中心距離相等的兩元素大小不相等
#include <iostream>
using namespace std;
int findMidNumber(int a[], int &n)
{
if(n == 1)
return a[0];
for(int i=0; i< n-1; i++) //從小到大給元素排序
{
int mini = i;
int minv = a[i];
for(int j=i+1; j<n; j++)
{
if(a[j] < a[mini])
mini = j, minv = a[j];
}
for(int j= mini; j>i; j--)
a[j] = a[j-1];
a[i] = minv;
}
int j = n/2;
if(n%2 == 1) //輸入奇數個元素
{
int i=j, k=j;
while(i>=0) //從中間向兩邊擴展,直到
//到達數組邊界或距離中心數字距離相等的兩數字不相等
{
if(a[i]==a[j])
{
if(a[k] == a[j])
--i, ++k;
else return -1;
}
else if(a[k] == a[j]) return -1; //注意此時已經有 a[i] != a[j]
else return a[j];
}
}
else //輸入偶數個元素
{
int i = n/2-1;
if(a[i] != a[j]) return -1;
else while(i > 0 )
{
if(a[i] == a[j])
--i, ++j;
else if(a[i] == a[i+1] || a[j] == a[j-1])
return -1;
else
return a[i+1];
}
return a[1]; //之前的return都沒有起作用,說明整個數組元素均相等
}
}
int main()
{
int n;
int a[1001];
cin>>n;
for(int i=0; i<n; i++)
cin>>a[i];
cout<<findMidNumber(a, n);
return 0;
}