2016蓝桥杯假期任务之《最大乘积》
来源:互联网 发布:画平面图的软件 编辑:程序博客网 时间:2024/06/11 17:28
问题描述
对于n个数,从中取出m个数,如何取使得这m个数的乘积最大呢?
输入格式
第一行一个数表示数据组数
每组输入数据共2行:
第1行给出总共的数字的个数n和要取的数的个数m,1<=n<=m<=15,
第2行依次给出这n个数,其中每个数字的范围满足:a[i]的绝对值小于等于4。
每组输入数据共2行:
第1行给出总共的数字的个数n和要取的数的个数m,1<=n<=m<=15,
第2行依次给出这n个数,其中每个数字的范围满足:a[i]的绝对值小于等于4。
输出格式
每组数据输出1行,为最大的乘积。
样例输入
1
5 5
1 2 3 4 2
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
- 2016蓝桥杯假期任务之《最大乘积》
- 2016蓝桥杯假期任务之《 最大最小公倍数》
- 2016蓝桥杯假期任务之《振兴中华》
- 2016蓝桥杯假期任务之《 黄金连分数》
- 2016蓝桥杯假期任务之《有理数类》
- 2016蓝桥杯假期任务之《三部排序》
- 2016蓝桥杯假期任务之《错误票据》
- 2016蓝桥杯假期任务之《幸运数》
- 2016蓝桥杯假期任务之《带分数》
- 2016蓝桥杯假期任务之《武功秘籍》
- 2016蓝桥杯假期任务之《切面条》
- 2016蓝桥杯假期任务之《猜字母》
- 2016蓝桥杯假期任务之《圆周率》
- 2016蓝桥杯假期任务之《扑克序列》
- 2016蓝桥杯假期任务之《分糖果》
- 2016蓝桥杯假期任务之《饮料换购》
- 2016蓝桥杯假期任务之《括号问题》
- 2016蓝桥杯假期任务之《复数运算》
- Python图像处理库PIL的Image模块介绍(三)
- 更改Toast显示位置的技巧
- 多线程基础
- 【JAVA】13、循环的中断
- c:c++内存分配
- 2016蓝桥杯假期任务之《最大乘积》
- 【MATLAB】数值表示、变量及表达式
- 对原生态JDBC程序中问题总结
- 右键新建菜单里的office快捷启动文件没有解决办法
- 纹理
- STS: Spring Boot and Spring MVC
- 求关注~
- noj 1058 Tom and Jerry
- CentOS安装Apache, Mysql及php