CCF-20161201-中间数(100分)

来源:互联网 发布:德拉蒙德格林2016数据 编辑:程序博客网 时间:2024/05/18 04:29
package CCF;import java.util.Arrays;import java.util.Scanner;/** 问题描述  在一个整数序列a1, a2, …, an中,如果存在某个数,大于它的整数数量等于小于它的整数数量,则称其为中间数。在一个序列中,可能存在多个下标不相同的中间数,这些中间数的值是相同的。  给定一个整数序列,请找出这个整数序列的中间数的值。输入格式  输入的第一行包含了一个整数n,表示整数序列中数的个数。  第二行包含n个正整数,依次表示a1, a2, …, an。输出格式  如果约定序列的中间数存在,则输出中间数的值,否则输出-1表示不存在中间数。样例输入62 6 5 6 3 5样例输出5样例说明  比5小的数有2个,比5大的数也有2个。样例输入43 4 6 7样例输出-1样例说明  在序列中的4个数都不满足中间数的定义。样例输入53 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);elseSystem.out.println("-1");}}


原谅我这个小渣渣,Java白学了。记得当初学习Java老师应该讲到IO流那,又加上刚学习比较懵逼,不懂什么new一只小狗汪汪叫是个什么鬼,所以导致一些东西学的很不好。今天才意识到之前写的代码Scanner用完都没有关闭,百度一下说是不关闭会消耗内存,当然以前写的都是小demo,所以并没有出现问题。怪不得一直纳闷Scanner定义的变量为什么一直显示黄色的警告标志,和变量没有使用一个样,我还想eclipse这是抽什么风,明明都用了还警告我,哈哈。


另外,当一个比较简单的demo一直在修改时不断地打补丁(非得用自己头脑风暴想到的那种方法),一定要及时切换思路,不然真进死胡同,明明很简单的问题却被弄得很复杂,比如这个题,真不想说什么了,这两天不宜敲代码。

原创粉丝点击