试题编号: |
1 |
试题名称: |
中间数 |
时间限制: |
10.0s |
内存限制: |
512.0MB |
问题描述:
在一个整数序列a1, a2, …, an中,如果存在某个数,大于它的整数数量等于小于它的整数数量,则称其为中间数。在一个序列中,可能存在多个下标不相同的中间数,这些中间数的值是相同的。
给定一个整数序列,请找出这个整数序列的中间数的值。
输入格式
输入的第一行包含了一个整数n,表示整数序列中数的个数。
第二行包含n个正整数,依次表示a1, a2, …, an。
输出格式
如果约定序列的中间数存在,则输出中间数的值,否则输出-1表示不存在中间数。
样例输入
6
2 6 5 6 3 5
样例输出
5
样例说明
比5小的数有2个,比5大的数也有2个。
样例输入
4
3 4 6 7
样例输出
-1
样例说明
在序列中的4个数都不满足中间数的定义。
样例输入
5
3 4 6 6 7
样例输出
-1
样例说明
在序列中的5个数都不满足中间数的定义。
评测用例规模与约定
对于所有评测用例,1 ≤ n ≤ 1000,1 ≤ ai ≤ 1000。
自己的解题思路:
使用vector存储数据,使用sort()排序,找出排序后的中间数(n/2位置处的数),使用count函数判断中间数等值的个数
如果存在满足题意的中间数,需满足:
例如:1 2 3 4...4 5 6 7 其中4为中间数,且4的个数可以为任意(>0) 大于4和小于4的个数相等,其和偶数。所以数据总数的奇偶和4的奇偶是一样的。也就是说数据总数的奇偶和中间数个数的奇偶是一样的。
代码:
1 #include<vector> 2 #include<iostream> 3 #include<algorithm> 4 using namespace std; 5 int main(){ 6 vector<int> array; 7 int n; 8 cin>>n; 9 for(int i=0;i<n;i++){//输入数据 10 int temp; 11 cin>>temp; 12 array.push_back(temp); 13 } 14 vector<int> temp; 15 temp=array; 16 sort(temp.begin(),temp.end());//排序 17 //for(int i=0;i<temp.size();i++){ 18 // cout<<temp[i]<<" "; 19 // } 20 int num=0; 21 num=count(temp.begin(),temp.end(),temp[n/2]);//判断中间数个数 22 if(num%2==0&&n%2==0||n%2==1&&num%2==1){ 23 cout<<temp[n/2]<<endl; 24 } 25 else cout<<-1<<endl; 26 }