整數乘積最大化

題目描述

給出一個整數n,將n分解爲至少兩個整數之和,使得這些整數的乘積最大化,輸出能夠獲得的最大的乘積。
例如:
2=1+1,輸出1;
10=3+3+4,輸出36。

思路

通過分析,不難發現其實最大時就是將整數拆成僅含3和2的序列,且3的個數儘量大

代碼

import java.util.Scanner;
public class Main{
	public static void main(String[] args){
	    //讀取輸入
	    Scanner in = new Scanner(System.in);
	    int num = in.nextInt();
	 	
	    int result = 1;
	    int count,remainder;
	 
	    remainder = num % 3;
	    //如果num除以3餘1,則3的個數爲num/3-1,否則爲num/3
	    count = (remainder == 1)?num/3-1:num/3;
		//累乘3 
	    for(;count>0;count--){
	        result *= 3;
	    }
	 	//餘數爲1,則再乘4;餘數爲2,再乘2
	    if(remainder == 1){
	        result <<= 2;
	    }else if(remainder == 2){
	        result <<= 1;
	    }
	    System.out.println(result);
	}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章