天天看點

藍橋杯乘法運算java_藍橋杯java 算法訓練 最大的算式

問題描述

題目很簡單,給出N個數字,不改變它們的相對位置,在中間加入K個乘号和N-K-1個加号,(括号随便加)使最終結果盡量大。因為乘号和加号一共就是N-1個了,是以恰好每兩個相鄰數字之間都有一個符号。例如:

N=5,K=2,5個數字分别為1、2、3、4、5,可以加成:

1*2*(3+4+5)=24

1*(2+3)*(4+5)=45

(1*2+3)*(4+5)=45

……

輸入格式

輸入檔案共有二行,第一行為兩個有空格隔開的整數,表示N和K,其中(2<=N<=15, 0<=K<=N-1)。第二行為 N個用空格隔開的數字(每個數字在0到9之間)。

輸出格式

輸出檔案僅一行包含一個整數,表示要求的最大的結果

樣例輸入

5 2

1 2 3 4 5

樣例輸出

120

樣例說明

(1+2+3)*4*5=120

import java.util.Scanner;

public class Main{

//求取數組A[start]到A[end]之間元素總和

public long getSum(int[] A, int start, int end) {

long sum = 0;

for(int i = start;i <= end;i++)

sum += A[i];

return sum;

}

public long getMax(int[] A, int start, int multi) {

if(multi == 0)

return getSum(A, start, A.length - 1);

long max = 0;

for(int i = start;i < A.length - 1;i++) {

//此處i < A.length - 1原因是遞歸時start = i + 1,且start要小于等于A.length - 1

long tempMax = getSum(A, start, i) * getMax(A, i + 1, multi - 1);

max = (max < tempMax ? tempMax : max);

}

return max;

}

public static void main(String[] args){

Main test = new Main();

Scanner in = new Scanner(System.in);

// System.out.println("請分别輸入一個整數n和一個整數k:");

int n = in.nextInt();

int k = in.nextInt();

int[] A = new int[n];

for(int i = 0;i < n;i++)

A[i] = in.nextInt();

System.out.println(test.getMax(A, 0, k));

}

}