1. 程式人生 > >2016藍橋杯演算法提高——最大乘積

2016藍橋杯演算法提高——最大乘積

演算法提高  最大乘積 問題描述   對於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.Arrays;
import java.util.Scanner;

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