免费注册 查看新帖 |

Chinaunix

广告
  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3405 | 回复: 6
打印 上一主题 下一主题

最大乘积——练手 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-04-19 19:12 |只看该作者 |倒序浏览
一个正整数一般可以分为几个互不相同的自然数的和,如3=1+2,4=1+3,5=1+4=2+3,6=1+5=2+4,…。
现在的任务是将指定的正整数n分解成若干个互不相同的自然数的和,且使这些自然数的乘积最大
给定一正整数n(3<=n<10000),求解决方案和最大乘积。
如: n=10
解决方案: 2, 3, 5
最大乘积:30

论坛徽章:
0
2 [报告]
发表于 2009-04-19 20:10 |只看该作者
Python代码:
def Biggest(n):
    result = []
    for i in xrange(2, int(n / 2) + 2):
        other = n - i
        if other >= 0:
            result.append(i)
            n = n - i
        else:
            break
    i = 0
    while n > 0:
        i -= 1
        result[i % len(result)] += 1
        n -= 1
    s=reduce((lambda x,y: x * y), result)
    return result,s
print Biggest(10)

n=10的结果:
([2, 3, 5], 30)


[ 本帖最后由 千年沉寂 于 2009-4-19 20:12 编辑 ]

论坛徽章:
0
3 [报告]
发表于 2009-04-19 23:14 |只看该作者


[ 本帖最后由 wzcsoft 于 2009-4-19 23:37 编辑 ]

论坛徽章:
0
4 [报告]
发表于 2009-04-20 10:50 |只看该作者
算法高手。。。。

论坛徽章:
0
5 [报告]
发表于 2009-04-20 10:59 |只看该作者
初来乍到.来学习的.

论坛徽章:
0
6 [报告]
发表于 2009-04-20 18:48 |只看该作者
应该是动态规划的思维来做
可惜方程式不会写

论坛徽章:
0
7 [报告]
发表于 2009-04-20 22:12 |只看该作者

回复 #6 teebye 的帖子

应该算是贪心算法。。
这涉及到数学上的一些东西 哈哈
eg.
x+y=n
当x==y时 x*y取得最大值
假设n=12,那么6*6>5*7>4*8...
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP