package CCF;
import java.util.Arrays;
import java.util.Scanner;
/**
问题描述
在一个整数序列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。
* @author Vivinia
*
* 2017年10月15日
*/
public class midNum {
static int[] num;
static int n,i,mid,left,right;
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
n=input.nextInt();
num=new int[n];
for(i=0;i<n;i++)
num[i]=input.nextInt();
input.close();
Arrays.sort(num);
mid=num[n/2]; //取中间元素,中间元素要么是中间数,要么就不是,取决于两边剩余个数
for(i=0;i<n/2;i++) { //查找左边和中间数不相等的个数
if(num[i]!=mid)
left++;
}
for(i=n/2;i<=n-1;i++) { //查找右边和中间数不相等的个数
if(num[i]!=mid)
right++;
}
if(left==right)
System.out.println(mid);
else
System.out.println("-1");
}
}
原谅我这个小渣渣,Java白学了。记得当初学习Java老师应该讲到IO流那,又加上刚学习比较懵逼,不懂什么new一只小狗汪汪叫是个什么鬼,所以导致一些东西学的很不好。今天才意识到之前写的代码Scanner用完都没有关闭,百度一下说是不关闭会消耗内存,当然以前写的都是小demo,所以并没有出现问题。怪不得一直纳闷Scanner定义的变量为什么一直显示黄色的警告标志,和变量没有使用一个样,我还想eclipse这是抽什么风,明明都用了还警告我,哈哈。
另外,当一个比较简单的demo一直在修改时不断地打补丁(非得用自己头脑风暴想到的那种方法),一定要及时切换思路,不然真进死胡同,明明很简单的问题却被弄得很复杂,比如这个题,真不想说什么了,这两天不宜敲代码。