编程之美2.14 解法二

来源:互联网 发布:python 开源 编辑:程序博客网 时间:2024/05/01 07:50

#include <iostream>
using std::endl;
using std::cout;
using std::cin;
int c=0;                                                                                                                                                    //为了测试
int find_Max(int *A, int n)
{
 int sum_left, sum_right, sum_mid;
 if(n==1)                                    
 { cout << "C=" << c++ << " " <<*A << endl; return *A;}
 else if(n==2)
 { cout << "C=" << c++ << " " << *A <<" " << *(A+1) << endl; return *A > *(A+1)? *A:*(A+1);}

 int mid;
 if(n%2==0)
  mid=n/2;
 else
  mid=(n-1)/2;

 int maxleft, maxright, i, temp;
 for(i=mid-2, maxleft=A[mid-1], temp=maxleft; i>=0 ; i--)
 {
  maxleft+=A[i];
  if(temp <= maxleft)
   temp=maxleft;
 } 
 maxleft=temp;
 for(i=mid+1, maxright=A[mid], temp=maxright; i<n; i++) 
 {
  maxright+=A[i];
  if(temp<=maxright)
   temp=maxright;
 } 
 maxright=temp;
 sum_mid=maxleft+maxright;

 sum_left=find_Max(A, mid);
 sum_right=find_Max(&A[mid], n-mid);

 int max;
 max=sum_left>=sum_right?sum_left:sum_right;
 max=max>=sum_mid?max:sum_mid;

 cout << "C=" << c++ << " "<< sum_left << " " << sum_right << " " << sum_mid << endl;
 return max;
}

int main()
{
 cout << "Please input some numbers:" << endl;
 int A[10];
 for(int i=0; i<10; i++)
  cin >> A[i];
 int max;
 max=find_Max(A, 10);
 cout << "The Max is: " << max << endl;
 return 0;
}

原创粉丝点击