2016藍橋杯演算法提高——最大乘積
阿新 • • 發佈:2018-12-30
演算法提高 最大乘積
問題描述
對於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 樣例輸出
程式碼:
每組輸入資料共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); } } }