1. 程式人生 > >CCF--中間數--用JAVA威尼斯人平臺出租語言實現

CCF--中間數--用JAVA威尼斯人平臺出租語言實現

大於 ref import 一行 排序 代碼 sys ccf 繼續

問題描述威尼斯人平臺出租 haozbbs.com Q1446595067
  在一個整數序列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。

這道題方法有很多,我只是寫出腦袋中第一念頭的做題思路。。

思路:
1.將輸入的數放進數組中,並且排序
2.找出數組中的中間數,註意數組的長度和下標不同。
3.通過比較中間數和數組中的數,大於中間數的數是否==小於中間數的數,相等則表示這個數是中間數,不等則輸入-1

代碼:

import java.util.Arrays;
import java.util.Scanner;

public class Main {
public static void main(String[] args) {
        int a = 0;//小於計數器
        int b =0;//大於計數器

        Scanner sc = new Scanner(System.in);

        int n = sc.nextInt();//n是整數的個數

        //存入數組中,並且排序
        int arr[] =new int [n];  
        for(int i =0;i<arr.length;i++){
            arr[i] = sc.nextInt();

        }
        Arrays.sort(arr);

        int mid = (arr.length-1)/2;//數組的長度是從1開始,數組下標是從0開始,所以需要-1
        for (int i = 0; i < arr.length; i++) {
            if(arr[mid]>arr[i]){    //中間數大於數組中的數記為a
                a++;
            }
            if(arr[mid]<arr[i]){   //中間數小於數組中的數記為b
                b++;
            }
        }

        if(a==b){     //相等則表明中間數左右兩邊個數相同,這個中間數是真正的中間數
            System.out.println(arr[mid]);
        }else{        //否則輸入-1
            System.out.println(-1);
        }

    }
    }

如有不對地方,請指出批評...後續繼續更新用java實現ccf例題

CCF--中間數--用JAVA威尼斯人平臺出租語言實現