重申一下这个游戏的规则吧:
给你一根长度为n的绳子,请把绳子剪成m段(m、n都是整数,n>1并且m>1),每段绳子的长度记为k[0],k[1],...,k[m]。请问k[0]xk[1]x...xk[m]可能的最大乘积是多少?
例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。
说实话,这个是一个规律游戏,我们只需要通过程序用语言解释出来就OK了,自己想了好长时间还是没有发现这个规律,最后参考大佬们的代码明白了。
public class demo { /* 当target为2时结果为1 为3时结果为2 为4时2*2 为5时2*3 为6时3*3 为7时2*2*3或者4*3 为8时2*3*3 为9时3*3*3 为10时2*2*3*3或者4*3*3 为11时2*3*3*3 为12时3*3*3*3 为13时2*2*3*3*3或者4*3*3*3
规律:
当一个数大于3时,呈现的规律为每3个为一个周期,周期中的3个结果都是有规律的。
*/ public static long c(long target){ if (target==1){ return 0; }else if (target == 2){ return 1; }else if (target == 3){ return 2; } //第几层 long x = target%3; //几个周期 long y = target/3; if (x==1){ return (long) (2*2*Math.pow(3,y-1)); }else if (x==2){ return (long)(2*Math.pow(3,y)); }else { return (long)(Math.pow(3,y-1)); } } public static void main(String[] args) { System.out.println(c(8)); } }