2016蓝桥杯假期任务之《最大乘积》

来源:互联网 发布:画平面图的软件 编辑:程序博客网 时间:2024/06/11 17:28
问题描述
  对于n个数,从中取出m个数,如何取使得这m个数的乘积最大呢?
输入格式
  第一行一个数表示数据组数
  每组输入数据共2行:
  第1行给出总共的数字的个数n和要取的数的个数m,1<=n<=m<=15,
  第2行依次给出这n个数,其中每个数字的范围满足:a[i]的绝对值小于等于4。
输出格式
  每组数据输出1行,为最大的乘积。
样例输入
1
5 5
1 2 3 4 2
样例输出
48 


代码:

import java.util.Scanner;import java.util.*;public class Main {public static void main(String[] args) {Scanner input = new Scanner(System.in);int T = input.nextInt();while (T--!= 0) {int n = input.nextInt();int m = input.nextInt();int[] a = new int[n];for (int i = 0; i < n; i++)a[i] = input.nextInt();Arrays.sort(a);if (m == 1) {System.out.println(a[a.length - 1]);continue;}int sum = 1;for (int i = a.length - 1, j = 0; i > 0 && j < a.length - 1;) {if (m <= 0)break;if (a[i] * a[i - 1] > a[j] * a[j + 1]) {sum *= a[i];i--;m--;} else {if (m >= 2) {sum *= a[j] * a[j + 1];j += 2;m -= 2;} else {sum *= a[i];i++;m--;}}}System.out.println(sum);}}}

运行结果:

15 51 2 3 4 248



1 0
原创粉丝点击