主题:关于求最大乘积的一道题目???
5lemon
[专家分:0] 发布于 2006-09-12 20:23:00
问题描述
一个正整数一般可以分为几个互不相同的自然数的和,如3=1+2,4=1+3,5=1+4=2+3,...
现在你的任务是将指定的正整数N分解成若干个互不相同的自然数的和,且使这些自然数的乘积最大.
输入:只一个正整数.(大于等于3,小于等于10000)
输出:第一行是分解方案,相邻的数之间用一个空格分开,并且按从小到大的顺序.
第二行是最大的乘积.
我在百度上看到的,一时没什么头绪,能否指点下??这程序应该是怎么样的??
回复列表 (共5个回复)
沙发
maxumi [专家分:2200] 发布于 2006-09-13 07:48:00
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.
程序未经调试,自己调试一下吧......
板凳
lgr7000 [专家分:230] 发布于 2006-09-14 18:26:00
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 楼
maxumi [专家分:2200] 发布于 2006-09-15 07:38:00
[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 楼
贺天行宝 [专家分:2300] 发布于 2006-09-18 20:58:00
哦,看来拆3!那位高人能说一下为什么吗?
5 楼
maxumi [专家分:2200] 发布于 2006-09-19 07:45:00
这只是归纳推理而已, 我不确定是否正确, 反正我AC了......XD
我来回复