有一个整数N,N可以分解成若干个整数之和,问如何分解能使这些数的乘积最大。(c语言)

来源:百度知道 编辑:UC知道 时间:2024/06/05 03:26:16
有一个整数N,N可以分解成若干个整数之和,问如何分解能使这些数的乘积最大。请编程,由键盘输入一个整数N(N<100),将N分解成若干个整数,输出这些数的乘积,且要保证M是最大的。
c语言高手进来帮忙啊

我不写完整程序,提一下思路:

我们要编写一个函数,这个函数把一个数分为两个数之和,并且这两个数的乘积最大,这样的函数是不是很好编写,代码如下:
void f1(int a, int *x,int *y){
*x=a/2;
*y=a-*x;
}
知道为什么这样分吗,原理很简单:两个数都最大的时候,乘积才最大。也就是各取一半,如果a是奇数就让y多1。

要完成把N分为多个数,使其乘积最大,我们就先分为两个数,然后分别对这两个数进行各自进行拆分(递归调用),直到分开的两个数乘积比分前小,那就取消这次拆分。

基于以上说明,我们对f1函数进行修改,增加递归调用部分:
void f1(int n){
int x,y;
x=n/2;
y=n-x;
if (n>=x*y) printf("%d ",n);
else {f1(x);f1(y);}
}

添加计算乘积m的代码,以及主程序,完成的如下:

-----------------
int m;

void f1(int n){
int x,y;
x=n/2;
y=n-x;
if (n>=x*y) {printf("%d ",n);m*=n;}
else {f1(x);f1(y);}
}

main(){
int n;
m=1;
scanf("%d",&n);
f1(n);
printf("\n%d",m);
}
-----------------
程序在SCO UNIX上运行通过,结果如下:
-----------------
$ cc a.c
$ a.out
9
4 2 3
24
$ a.out
10
2 3 2 3

有一个整数N,N可以分解成若干个整数之和,问如何分解能使这些数的乘积最大。(c语言) 编个C++程序怎么弄啊。。有一个整数n,将n分解成若干个整数之和,问如何分解能使这些数的乘积最大 将一个整数n转换成字符串,n的整数不确定,可以显示任意位数的整数(2种方法) C++编程:从键盘输入一个整数n(要求n>12),并验证从6到n之间的所有偶数都可以分解为两个素数之和的形式 将任意一正整数(1<n<100)分解成若干正整数的和. 将一个整数n转换成字符串。例如,输入483,应输出字符串“483”。n的位数不确定,可以是任意位数的整数 可以把一个自然数分解成若干个自然数之和 1.编程求某年第N天的日期?2.编程把一个整数分解成质因数的连乘积,并打印其连乘式. 输入一个正整数n,将n分解成质因数幂的乘积形式. 对任意奇数n,,整数(n+15)(n+15)-(n+5)(n+5)始终有最大公因数