zoukankan      html  css  js  c++  java
  • 剑指offer67-剪绳子**

    题目描述

    给你一根长度为n的绳子,请把绳子剪成整数长的m段(m、n都是整数,n>1并且m>1,m<=n),每段绳子的长度记为k[1],...,k[m]。请问k[1]x...xk[m]可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。

    输入描述:       输入一个数n,意义见题面。(2 <= n <= 60)

    返回值描述:   输出答案。

    示例

    输入       8

    返回值   18

    知识点回顾

    贪心、数组、组合数学

    当成数学题来做:

    • 由于是乘法,那么除了1以外越多数相乘,得到的结果就越大。
    • 因此从2开始考虑。但是都分成2的话必然会有奇数分成包含1的段数,因为1相当于浪费了一个乘数,所以如果最后剩1的时候我们应该将他变为3. 因此得到分成的段数长度为2,3是最好的。
    • 又因为 2 * 2 * 2 < 3 * 3 说明3个2都不如2个3 ,因此应该让3 相对来说比2 多。
    • 于是让该数对3相除,余数如果为2,则分为 1个2 ,N个3 为最优解,如果余数为1,则应分为2个2 ,N-1 个3 为最优解

    代码

    # -*- coding:utf-8 -*-
    class Solution:
        def cutRope(self, number):
            # write code here
            if number == 2:
                return 1
            if number == 3:
                return 2
            flg1,flg2=number%3,number//3
            if flg1==1:
                return 2*2*pow(3,(flg2-1))
            elif flg1==2:
                return 2*pow(3,flg2)
            else:
                return pow(3,flg2)

     参考:https://www.cnblogs.com/aiguozou/p/11576036.html

  • 相关阅读:
    问题 A: 【递归入门】全排列
    第一个struct2程序(2)
    第一个struct2程序
    Java学习 第二节
    重学Java
    Servlet过滤器
    struct2
    Java web struct入门基础知识
    one by one 项目 part 6
    软件工程导论 桩模块和驱动模块
  • 原文地址:https://www.cnblogs.com/foolangirl/p/14164018.html
Copyright © 2011-2022 走看看