编程之美2.14 解法二

#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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值