ccf201612-1

来源:互联网 发布:宁波知豆电动汽车公司 编辑:程序博客网 时间:2024/05/21 17:50

问题:

问题描述:

在一个整数序列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,将中间数之后的结果统计为b,如果a=b,则可以判定array[number/2]为要求的中间数,否则输出-1。

题解:

import java.util.*;public class Main {public static void main(String[] args) {// TODO Auto-generated method stubScanner sc = new Scanner(System.in);int number,i,j,a=0,b=0,temp=0;number = sc.nextInt();int array[]= new int[number];for(i=0;i<number;i++){array[i]=sc.nextInt();}for(i=0;i<number;i++)for(j=0;j<number-i-1;j++){if(array[j]>array[j+1]){temp=array[j];array[j]=array[j+1];array[j+1]=temp;}}for(i=0;i<number/2;i++){if(array[i]<array[number/2]){a++;}}for(i=number/2+1;i<number;i++){if(array[i]>array[number/2]){b++;}}if(a==b) System.out.println(array[number/2]);else System.out.println(-1);sc.close();}}


原创粉丝点击