0

这是我到目前为止的代码。我什至不确定我是否正确创建了复制的排序数组。整个 80% 的想法让我感到困惑,所以我不知道如何完成这段代码。任何想法都会非常有帮助。

public static int top_20(int[]arr, int size){
     Arrays.sort(arr);
     int[] sorted = new int[size];
     for(int i = 0; i < size; i++){
         sorted[i] = arr[i];
     }
}
4

3 回答 3

0

您只需要for正确设置循环。在前 20% 的情况下,它将类似于

for (int i = (int) (size * 0.8); i < size; i++)

您还可以使用arr.length来确定数组的大小。第一部分size * 0.8是确定,从哪里开始,(int)去掉小数部分,以便得到int可以用作索引的 ,。最后,你想上升到size, (或arr.length就此而言)。这将打印出数组中前 20% 的元素,四舍五入会导致一些小错误。

于 2014-02-17T01:02:50.943 回答
0

白手起家。将问题陈述分解成更小的部分,然后解决它们。

  1. 你如何计算百分比?应用该知识来计算数组的 20% 有多少。

  2. 给定这个数字,你需要什么范围的数组索引?

  3. 你如何打印一个数字?

  4. 你如何打印一系列数字?

于 2014-02-17T01:03:07.087 回答
0
public static int[] top_20(int[] arr){
     Arrays.sort(arr);

     int size = (int)(arr.length * 0.2); // size is 20% of array
     int start = (int)(arr.length * 0.8); // start at the 80th percentile

     int[] top20 = new int[size + 1];

     for(int i = start; i < arr.length; i++){
         top20[i - start] = arr[i];
     }

     return top20;
}

public static void main(String[] args) {

    int[] x = {92,92,93,94,98,72,75,79,80}; // maybe a class' marks

    System.out.println(Arrays.toString(top_20(x))); // [94, 98]
}
于 2014-02-17T01:09:09.640 回答