问题描述:

kAc有n堆糖果,每堆有A[i]个。
kAc说你只能拿m次糖果,聪明的你当然想要拿最多的糖果来吃啦啦啦~
//第二天,kAc问你还想吃糖果么?(嘿嘿嘿)说着眼角路出奇怪的微笑...

输入格式:

第一行两个数字n和m,第二行有n个数字A[i]。

输出格式:

输出一行表示最多能拿几个糖果。

样例输入:

2 2
1 2

样例输出:

3

数据规模和约定:

0<n≤1000
其余数字都是不超过1,000,000,000的非负整数。

思路:

  1. 首先大家不要被题目吓着了哈哈哈~,其实他想表达的意思是,第一行输入:有m堆糖果,最多可以拿n次,第二行输入的内容就是每堆糖果里含有糖果的个数。

  1. 首先将第二行的数据录入到数组中,m表示数组的长度,n则表示取数组的前n-1项(包括n-1项)

  1. 为了拿最多的糖果我们使用冒泡排序将数组元素进行从大到小的排序,然后再把前n-1项累加起来即可。

  1. 但是在这里需要注意的就是,输入数组的元素是不超过1,000,000,000的非负整数,所以结果我们使用long类型来存储,否则测试结果达不到满分!

完整代码:

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner  scan = new Scanner(System.in);
        int n = scan.nextInt();
        int m = scan.nextInt();
        int arr[] = new int[n];
        int temp; 
              long sum = 0;
        for (int i = 0; i < arr.length; i++){
            arr[i] = scan.nextInt();
        }

        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;
                }
            }
        }

        for (int i = 0; i < m; i++){
            sum += arr[i];
        }
        System.out.println(sum);

    }

}

测试结果:

更多推荐