【編程題解】Kobe’s bread

Description

Kobe opened a bakery, a counter has N rows of shelves, each row of shelves can store K bread, and each bread has its fresh-keeping deadline days, such as 1, 3, 4,and so on.

Kobe likes to start with the most neatly arranged row, because in this case the bread on the shelf does not need to be processed anymore.

Definition of tidiness: The fewer the reverse order pairs of the dates of the bread in each row of shelves, the more tidy the row of bread. If the freshness date of the bread in the row of shelves is completely ascending, it is the cleanest.

Definition of reverse pair: In an array A, in the case of i <j, if A[i]> A[j], then(i, j) is called a reverse pair in array A.

Would you please help Kobe figure out the order in which to organize the shelves?

 

Input

Enter N in the first line to indicate the number of rack rows.

Enter k in the second line to indicate the amount of bread on each row of shelves.

The N*karray after that represents the number of days to keep each bread fresh.

Data range:1≤N,k≤200,0≤number≤10000

 

Output

The output is a new N*k array after reordering the rows of shelves according to the degree of neatness.

There is a total of one line of output. Refer to the output sample for the specific format.

Note that the same reverse order number is arranged in the original order of theshelf.

Sample Input 1 

4
8
1 2 3 4 5 6 7 8
11 6 5 7 3 2 2 0
2 3 6 1 12 3 5 4
0 2 4 5 3 11 6 7

Sample Output 1

[[1, 2, 3, 4, 5, 6, 7, 8], [0, 2, 4, 5, 3, 11, 6, 7], [2, 3, 6, 1, 12, 3, 5, 4], [11, 6, 5, 7, 3, 2, 2, 0]]

 

Personal Answer  (using language:JAVA)  Not necessarily right

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int k =scanner.nextInt();
        int [][] array=new int[n][k];
        for(int i=0;i<n;i++){
            for(int j =0;j<k;j++){
                array[i][j]=scanner.nextInt();
            }
        }

        double [] res=new double[n];
        for(int i=0;i<n;i++){
            int order=0;
            for(int j =0;j<k;j++){
                for(int m=0;m<k;m++){
                    if(j<m && array[i][j]>array[i][m]){
                        order++;
                    }
                }
            }
            res[i]=order;
        }

        int []index=Arraysort(res);
        System.out.print("[");
        for(int i=0;i<n;i++){
            System.out.print("[");
            int tmp =index[n-i-1];
            for(int j =0;j<k;j++){
                if(j!=(k-1)){
                    System.out.print(array[tmp][j]+", ");
                }
                else {
                    System.out.print(array[tmp][j]);
                }
            }
            System.out.print("]");
          	if(i!=(n-1)){
                System.out.print(", ");
            }
        }
        System.out.print("]");

    }

    public static int[] Arraysort(double[]arr)
    {
        double temp;
        int index;
        int k=arr.length;
        int[]Index= new int[k];
        for(int i=0;i<k;i++)
        {
            Index[i]=i;
        }

        for(int i=0;i<arr.length;i++)
        {
            for(int j=0;j<arr.length-i-1;j++)
            {
                if(arr[j]<arr[j+1])
                {
                    temp = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = temp;
                    index=Index[j];
                    Index[j] = Index[j+1];
                    Index[j+1] = index;
                }
            }
        }
        return Index;
    }
}

Welcome to communicate!

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章