【编程题解】Kobe’s bread

该博客讲述了科比开的面包店如何按照整洁度排列面包架的故事。每排货架可以放K个面包,每个面包有不同的保质期天数。整洁度定义为每排货架上保质期逆序对的数量越少,排列越整洁。博主提出了帮助科比重新组织货架顺序的算法,并给出了输入输出的详细说明及个人的JAVA实现。欢迎交流讨论。
摘要由CSDN通过智能技术生成

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!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值