回 帖 发 新 帖 刷新版面

主题:[讨论]最优分解方案

最优分解方案
(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);
}

回复列表 (共3个回复)

沙发

[code=c]
可以用数组存放:
#include <iostream>
using namespace std;
const int size = 10000;

int main() {
    int n, sum = 0;
    cout << "input the number: ";
    cin >> n;
    int i, j = 0, t = 0;
    for (i = 2; sum < n; ++i) { //分解的越多值越大。
        sum += i;        
    }
    i--;
    t = sum - n; //大了多少从中减去
    
    int carry;
    int digit = 1; //多少个整数连起来表示大整数
    int temp = 0;
    int* buf = new int[n];    
    buf[0] = 1;
    cout << "follow number :" << endl;
    for (j = 2; j <= i; ++j) {
        if (j == t) continue;
        carry = 0;
        cout << j << " ";
        for(int k = 0; k < digit; ++k) {
            temp = buf[k] * j + carry;
            buf[k] = temp % size;
            carry = temp / size;
        }
        if (carry) {
            buf[digit] = carry;
            digit++;
        }
    }
    cout << "\nthe max value is:\n";
    cout << buf[digit - 1]; //最高位    
    for (int k = digit - 2; k >= 0; --k) {
        for (i = size / 10; i > 1 && i > buf[k]; i /= 10) {
            cout << "0";            
        }            
        cout << buf[k];
    }
    return 0;
}

[/code]

板凳

你好.我是全职网赚工作者.
如果你有时间有电脑.
想在网络上创业.请联系我..
项目绝对真实.详情QQ空间资料
加盟请联系 QQ908889846

3 楼

寻找一直寻找机会的人!
一个趋势中的趋势的项目!
一个直销和传销终结者的项目!
一个帮助普通创业者成功的项目!
   我们在互联网上正在拓展一个生意项目,现在正在寻求合作伙伴。我们认为成功的关键是你是什么人?还有你和谁在一起。我们在乎的是--您是否是有激情、有梦想的人。有意者请跟我们联系,我们和您谈谈,给您讲解一些生意概念,或许我们可以合作。一个集即时网游、交友,娱乐游戏,网络品牌代理商城,互联网平台项目招商进行中……详情QQ空间资料
网商咨询 摩客天宇QQ 909065437 

我来回复

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