回 帖 发 新 帖 刷新版面

主题:关于求最大乘积的一道题目???

问题描述 
一个正整数一般可以分为几个互不相同的自然数的和,如3=1+2,4=1+3,5=1+4=2+3,... 
现在你的任务是将指定的正整数N分解成若干个互不相同的自然数的和,且使这些自然数的乘积最大. 
输入:只一个正整数.(大于等于3,小于等于10000) 
输出:第一行是分解方案,相邻的数之间用一个空格分开,并且按从小到大的顺序. 
第二行是最大的乘积. 

我在百度上看到的,一时没什么头绪,能否指点下??这程序应该是怎么样的??

回复列表 (共5个回复)

沙发

program lx;
  var
    i,n:integer;
  begin
    readln(n);
    write(n,'=');
    for i:=1 to (n-3) div 3 do write('3+');
    n:=n-((n-3) div 3)*3;
    if n=3 then writeln('3');
    if n=4 then writeln('2+2');
    if n=5 then writeln('3+2');
  end.

简单地说,就是把n全拆成3.

程序未经调试,自己调试一下吧......

板凳


var
n,m:integer;
begin
  readln(n);
  m:=n div 2;
  if m+m=n then writeln(m-1,' ',m+1)
           else writeln(m,' ',m+1);
end.

3 楼

[quote]
var
  n,m:integer;
begin
  readln(n);
  m:=n div 2;
  if m+m=n then writeln(m-1,' ',m+1)
    else writeln(m,' ',m+1);
end.[/quote]

这个程序有严重问题
输入: 100
输出: 49 51

49*51=2499

然则, 100=3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+2+2

3*3*3*3*3*3*3*3*3*3*3*3*3*3*3*3*3*3*3*3*3*3*3*3*3*3*3*3*3*3*3*3*2*2=370604037703682

哪个比较大就不用我说了吧......XD

4 楼

哦,看来拆3!那位高人能说一下为什么吗?

5 楼

这只是归纳推理而已, 我不确定是否正确, 反正我AC了......XD

我来回复

您尚未登录,请登录后再回复。点此登录或注册