zoukankan      html  css  js  c++  java
  • 算法笔记_163:算法提高 最大乘积(Java)

    目录

    1 问题描述

    2 解决方案

     


    1 问题描述

    问题描述
      对于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 

    2 解决方案

    具体代码如下:

    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.Scanner;
    
    public class Main {
        public static long n, m, temp;
        public static ArrayList<Long> list = new ArrayList<Long>();//存放输入的数
        public static ArrayList<Long> result = new ArrayList<Long>();
        
        public void getResult() {
            Collections.sort(list);
            for(int i = 0, j = list.size() - 1;m > 0;) {
                if(m >= 2) {
                    long a1 = list.get(i) * list.get(i + 1);
                    long a2 = list.get(j) * list.get(j - 1);
                    if(a2 > a1) {
                        temp *= list.get(j);
                        j--;
                        m--;
                    } else {
                        temp *= a1;
                        i = i + 2;
                        m = m - 2;
                    }    
                } else {
                    if(m == 1) {
                        temp *= list.get(j);
                        j--;
                        m--;
                    }
                }
            }
            result.add(temp);
        }
        
        public static void main(String[] args) {
            Main test = new Main();
            Scanner in = new Scanner(System.in);
            int t = in.nextInt();
            while(t > 0) {
                t--;
                n = in.nextLong();
                m = in.nextLong();
                temp = 1;
                list.clear();
                for(int i = 0;i < n;i++) {
                    long a = in.nextLong();
                    list.add(a);
                }
                test.getResult();
            }
            for(int i = 0;i < result.size();i++)
                System.out.println(result.get(i));
        }
    }

     

     

     

     

    参考资料:

       1. 蓝桥杯 算法提高 最大乘积

  • 相关阅读:
    关于宏定义与内联函数
    vsv
    nginx与php之间的通信
    php高级
    PHP基础知识
    php结合redis实现高并发下的抢购、秒杀功能
    MySQL索引优化
    PHP基础(谈一谈Session&Cookie)
    Yii2框架查询指定字段和获取添加数据的id
    linux常用命令
  • 原文地址:https://www.cnblogs.com/liuzhen1995/p/6786053.html
Copyright © 2011-2022 走看看