乘積最大的分解

/*問題描述:已知 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.  }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章