CCF201612-1 中间数
来源:互联网 发布:windows sdk编程是啥 编辑:程序博客网 时间:2024/05/01 11:34
问题描述
在一个整数序列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。
分析:这道题首先,先排好序,如果中间数存在,那么一定是a[(n-1)/2] (n为数组元素总数),那么我们可以匹配这个中间数,从左边开始找到第一个=a[(n-1)/2],并记录下标index1,接下来继续匹配直到a[i] != a[(n-1)/2],并记录下标index2=i-1,如果index1+index2 = n-1,那么左右正好是对称的,即大于中间数的个数和小于中间数的个数相等。
#include<iostream>#include<algorithm>using namespace std;int middle(int a[],int n);int main(){ int a[1000]; int k; cin>>k; for(int i = 0;i<k;i++) cin>>a[i]; cout<<middle(a,k)<<endl; return 0;}int middle(int a[],int n){ int i=0; sort(a,a+n); if(n==1) return a[0]; else{ int index = (n-1)/2; while(a[i]!=a[index]) i++; int index2 = i; while(a[i]==a[index]) i++; int index3 = i-1; if(index2+index3==n-1) return a[index2]; else return -1; }}
阅读全文
0 0
- CCF201612-1中间数
- CCF201612-1-中间数
- CCF201612-1中间数
- CCF201612-1 中间数
- CCF201612-1 中间数
- CCF201612-1 中间数(100分)
- CCF201612-1 中间数(解法二)(100分)
- CCF201612-1 中间数(解法三)(100分)
- CCF201612-1
- ccf201612-1
- CCFCSP201612-1中间数
- 201612-1 中间数
- 201612-1中间数
- 201612-1中间数
- CCF 201612-1 中间数
- CCF 201612-1 中间数
- CCF 201612-1 中间数
- CCF-201612-1-中间数
- 关于redis的一些问题,事物方面,线程,在项目中的应用等几个点
- 划分型DP相关
- opencv使图片变亮
- github上的license-许可证
- java 解决 pat 乙级 1072. 开学寄语(20)
- CCF201612-1 中间数
- <学习笔记>KMP(MP)算法
- muduo库源码学习(base)AsyncLogging
- C语言中static变量、函数跟其他变量、函数的区别
- 冒泡排序
- H5新增标签
- Hibernate执行流程&用Hibernate框架完成增删改查的操作
- 哈哈日语 「うそ~」这个词是怎么来的?
- 概率论相关分布总结