割繩子

題目描述
給你一根長度爲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。
輸入描述: 輸入一個數n,意義見題面。(2 <= n <= 60)
輸出描述: 輸出答案。

示例
輸入 8
輸出 18

<?php

function cutRope($number)
{
    // write code here
    $arr[0] = 0;
    $arr[1] = 1;
    $arr[2] = 2;
    $arr[3] = 3;
   
    if ($number < 2){
        return 0;
    }
    if ($number < 4){
        return $arr[$number-1];
    }
    
    for($i = 4; $i <= $number; $i++){
        $max = 0;
        for($j = 1; $j <= $number/2; $j++){
            $t = $arr[$j] * $arr[$i-$j];
            if ($t > $max) {
                $max = $t;
            }
        }
        $arr[$i] = $max;
    }
    return $arr[$number];    
}

go

package main

import (
	"fmt"
)

func main() {
	fmt.Println(gsz(5))
}

func gsz(num int) int {

	arr := make([]int, 0)
	for i := 0; i < 4; i++ {
		arr = append(arr, i)
	}

	if num < 2 {
		return 0
	}
	if num < 4 {
		return arr[num-1]
	}

	for i := 4; i <= num; i++ {
		max := 0
		for j := 1; j <= num/2; j++ {
			t := arr[j] * arr[i-j]
			if t > max {
				max = t
			}
		}
		arr = append(arr, max)
	}

	return arr[num]
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章