1. 程式人生 > >csp中間數java

csp中間數java

201612-1

試題名稱: 中間數 時間限制: 1.0s 記憶體限制: 256.0MB 問題描述: 問題描述   在一個整數序列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。

package ddd;
import java.util.*;
public class Mainn
{	
	static Scanner scanner=new Scanner(System.in);
    static void jiangyou() {
	  int n=scanner.nextInt();
	  int[] x=new int[n];
	  for(int i=0;i<n;i++) {
		  x[i]=scanner.nextInt();
	  }
	  Arrays.sort(x);
	  int temp=0;
	  if(n%2==0) {	
		  int sum=x[n/2-1];//因為是從0開始的序號,不可以直接n/2
		  for(int i=0;i<n;i++) {
			  if(x[i]==sum) {
				  temp++;
			  }
		  }
		  if(temp%2==0) {
			  System.out.println(sum); 
		  }
		  else
			  System.out.println(-1);
	  }
	  else {
		  int sum=x[(n-1)/2];
		  for(int i=0;i<n;i++) {
			  if(x[i]==sum) {
				  temp++;
			  }
		  }
		  if(temp%2!=0) {
			  System.out.println(sum); 
		  }
		  else
			  System.out.println(-1);
	  }
	  System.out.println();
  
    }
	public static void main(String[] args)
    {
		jiangyou();
    }
}