網易2018筆試題七

小易老師是非常嚴厲的,它會要求所有學生在進入教室前都排成一列,並且他要求學生按照身高不遞減的順序排列。有一次,n個學生在列隊的時候,小易老師正好去衛生間了。學生們終於有機會反擊了,於是學生們決定來一次瘋狂的隊列,他們定義一個隊列的瘋狂值爲每對相鄰排列學生身高差的絕對值總和。由於按照身高順序排列的隊列的瘋狂值是最小的,他們當然決定按照瘋狂值最大的順序來進行列隊。現在給出n個學生的身高,請計算出這些學生列隊的最大可能的瘋狂值。小易老師回來一定會氣得半死。

import java.util.Scanner;

public class Wangyig {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        /*解題思路:
         * 中間最大,再在兩邊放最小的兩個,再放次大的兩個
         * */
        Scanner in = new Scanner(System.in);
        int n=in.nextInt();
        int a[] =new int[n];
        int b[] =new int[n];//用來放瘋狂隊列
        int mid = 0,midl,midr,sum=0,fin=0; 
        int small=n-1,big=1;
        Boolean tag = true;
        for(int i=0;i<n;i++){
            a[i] = in.nextInt();
        }
        //先從大到小排序,直接選擇排序
        for(int i=0;i<n-1;i++){
            int max = a[i];
            int maxi = i;
            for(int j=i+1;j<n;j++){
                if(max<a[j]){
                    max = a[j];
                    maxi = j;
                }
            }
            if(maxi != i){
                int temp = a[i];
                a[i] = max;
                a[maxi] = temp; 
            }
        }
        if(n%2 == 0){
            mid = n/2-1;
        }else{
            mid = n/2;
        }
        b[mid] = a[0];
        midl = mid-1;
        midr = mid+1;

        while(midl>=0 || midr<n){
            if(tag == true){
                if(midr<n){
                    b[midr++]=a[small--];
                    System.out.println("a"+b[midr-1]);
                }
                if(midl>=0){
                    b[midl--]=a[small--];
                    System.out.println("b"+b[midl+1]);
                }
                tag = false;
            }else{
                if(midr<n){
                    b[midr++]=a[big++];
                    System.out.println("c"+b[midr-1]);
                }
                if(midl>=0){
                    b[midl--]=a[big++];
                    System.out.println("d"+b[midl+1]);
                }
                tag = true;
            }
        }
        for(int i=0;i<n-1;i++){
            System.out.println(b[i]);
            sum+=Math.abs(b[i]-b[i+1]);
        }

        b[mid] = a[n-1];
        midl = mid-1;
        midr = mid+1;
        small=n-2;big=0;
        tag = true;
        System.out.println("~~~~~~~~~~~~~~~~~~");
        while(midl>=0 || midr<n){
            if(tag == true){
                if(midr<n){
                    b[midr++]=a[big++];
                    System.out.println("c"+b[midr-1]);
                }
                if(midl>=0){
                    b[midl--]=a[big++];
                    System.out.println("d"+b[midl+1]);
                }
                tag = false;
            }else{
                if(midr<n){
                    b[midr++]=a[small--];
                    System.out.println("a"+b[midr-1]);
                }
                if(midl>=0){
                    b[midl--]=a[small--];
                    System.out.println("b"+b[midl+1]);
                }
                tag = true;
            }
        }
        for(int i=0;i<n-1;i++){
            System.out.println(b[i]);
            fin+=Math.abs(b[i]-b[i+1]);
        }
        fin=fin>sum?fin:sum;
        System.out.print(b[n-1]+" "+fin);
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章