2016蓝桥杯假期任务之《最大乘积》
2016-02-17 23:14
387 查看
问题描述
对于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
样例输出
代码:
运行结果:
1
5 5
1 2 3 4 2
48
对于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 ; 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); } } }
运行结果:
1
5 5
1 2 3 4 2
48
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树