主题:[讨论]最优分解方案
最优分解方案
(best.pas/c/cpp)
[问题描述]
经过第一轮的游戏,不少同学将会获得圣诞特别礼物,但这时细心的数学课代表发现了一个问题:留下来的人太多而使礼物数量可能不够,为此,加试了一道数学题:将一个正整数n分解成若干个互不相等的正整数的和,使得这些数的乘积最大,当主持人报出一个n后,请你立即将这个最大值报出来,现请你帮你的好友编一个程序来解决这个问题。
[输入文件]
输入文件best.in中只有1个数n(其中1<=n<=1000)。
[输出文件]
输出文件best.out中也是一个数,是乘积的最大值。
[输入样例]
7
[输出样例]
12
------------------------------------------
这道题明明超过100(大概)就会超过精度范围(unsigned long),可是n还(其中1<=n<=1000)。怎么解决啊
-----------------------------------------
我的程序
#include "stdio.h"
void max(int n,unsigned long *s)
{int t;
if(n/2<=1)
{
*s=(*s)*n;
}
else
{
max(n/2,s);
max(n-n/2,s);
}
}
int main()
{int n;
scanf("%ld",&n);
unsigned long s=1;
max(n,&s);
printf("%ld",s);
}
(best.pas/c/cpp)
[问题描述]
经过第一轮的游戏,不少同学将会获得圣诞特别礼物,但这时细心的数学课代表发现了一个问题:留下来的人太多而使礼物数量可能不够,为此,加试了一道数学题:将一个正整数n分解成若干个互不相等的正整数的和,使得这些数的乘积最大,当主持人报出一个n后,请你立即将这个最大值报出来,现请你帮你的好友编一个程序来解决这个问题。
[输入文件]
输入文件best.in中只有1个数n(其中1<=n<=1000)。
[输出文件]
输出文件best.out中也是一个数,是乘积的最大值。
[输入样例]
7
[输出样例]
12
------------------------------------------
这道题明明超过100(大概)就会超过精度范围(unsigned long),可是n还(其中1<=n<=1000)。怎么解决啊
-----------------------------------------
我的程序
#include "stdio.h"
void max(int n,unsigned long *s)
{int t;
if(n/2<=1)
{
*s=(*s)*n;
}
else
{
max(n/2,s);
max(n-n/2,s);
}
}
int main()
{int n;
scanf("%ld",&n);
unsigned long s=1;
max(n,&s);
printf("%ld",s);
}