/*问题描述:已知 N 个正整数满足 K1+K2+...+Kn=M。求一组最佳的分解,使得
K1*K2*....*Kn 为最大。
例如:N=2时,给定 K1+K2=6,当 K1=3,K2=3 时,K1*K2=9 为最大
*/
- #include<iostream>
- using namespace std;
- #define M 10
- int Max,temp[M],K[M];//最多可以有M个正整数相加,K1+.....+Km=M;
- int main(){
- int N;
- void Calculate(int N,int n,int sum);
- cout<<"M="<<M<<endl;
- cout<<"Please Input N(N>1 && N<M)"<<endl;
- cin>>N;
- Max=0;//存储乘积最大数
- Calculate(N,0,0);
- for(int i=0;i<N;i++){
- cout<<"K["<<i+1<<"]="<<K[i];
- if(i!=N-1)cout<<",";
- }
- cout<<" 时,";
- for(i=0;i<N;i++){
- cout<<"K["<<i+1<<"]";
- if(i!=N-1)cout<<"*";
- }
- cout<<"="<<Max<<"为最大"<<endl;
- return 0;
- }
- void Calculate(int N,int n,int sum){
- if(n==N){//k1...kn都取值
- if(sum==M){
- int temp_Max=1;
- for(int i=0;i<N;i++)temp_Max*=temp[i];
- if(temp_Max>Max){
- for(int i=0;i<N;i++)K[i]=temp[i];//存储这个结果
- Max=temp_Max;
- }
- }
- else return ;
- }
- else{
- for(int i=M-N+1;i>=1;i--){
- if(n>=1){
- if(temp[n-1]<i)continue;
- }
- if(sum+i>M)continue;
- temp[n]=i;
- Calculate(N,n+1,sum+i);
- }
- return ;
- }
- }