乘积最大的分解

/*问题描述:已知 N 个正整数满足 K1+K2+...+Kn=M。求一组最佳的分解,使得
 K1*K2*....*Kn 为最大。
   例如:N=2时,给定 K1+K2=6,当 K1=3,K2=3 时,K1*K2=9 为最大
*/

  1. #include<iostream>
  2. using namespace std;
  3. #define M 10
  4. int Max,temp[M],K[M];//最多可以有M个正整数相加,K1+.....+Km=M;
  5. int main(){
  6.  int N;
  7.  void Calculate(int N,int n,int sum);
  8.  cout<<"M="<<M<<endl;
  9.  cout<<"Please Input N(N>1 && N<M)"<<endl;
  10.  cin>>N;
  11.     Max=0;//存储乘积最大数
  12.  Calculate(N,0,0);
  13.  for(int i=0;i<N;i++){
  14.   cout<<"K["<<i+1<<"]="<<K[i];
  15.   if(i!=N-1)cout<<",";
  16.  }
  17.  cout<<" 时,";
  18.  for(i=0;i<N;i++){
  19.   cout<<"K["<<i+1<<"]";
  20.   if(i!=N-1)cout<<"*";
  21.  }
  22.     cout<<"="<<Max<<"为最大"<<endl;
  23.  return 0;
  24. }
  25. void Calculate(int N,int n,int sum){
  26.  if(n==N){//k1...kn都取值
  27.   if(sum==M){
  28.    int temp_Max=1;
  29.    for(int i=0;i<N;i++)temp_Max*=temp[i];
  30.    if(temp_Max>Max){
  31.     for(int i=0;i<N;i++)K[i]=temp[i];//存储这个结果
  32.     Max=temp_Max;
  33.    }
  34.   }
  35.   else return ;
  36.  }
  37.  else{
  38.   for(int i=M-N+1;i>=1;i--){
  39.    if(n>=1){
  40.     if(temp[n-1]<i)continue;
  41.    }
  42.    if(sum+i>M)continue;
  43.    temp[n]=i;
  44.    Calculate(N,n+1,sum+i);
  45.   }
  46.   return ;
  47.  }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值