70,021
社区成员




#include <stdio.h>
/*求三个整数中最大的数*/
int Max(int a, int b, int c) {
int max = 0;
if (a > b)
max = a;
else
max = b;
if (max > c)
return max;
else
return c;
}
/*参数Left和Right分别为传入数组的左右边界*/
int MaxSubSum(const int A[], int Left, int Right) {
int MaxLeftSum, MaxRightSum; /*将数组分为左右两半后,左边和右边的子序列最大值*/
int MaxLeftBorderSum, MaxRightBorderSum;
int LeftBorderSum, RightBorderSum;
int Center, i;
if (Left == Right)
{
if (A[Left] > 0)
return A[Left];
else
return 0;
}
/*递归算法开始,好吧,我看不懂...*/
Center = (Left + Right) / 2;
MaxLeftSum = MaxSubSum(A, Left, Center);
MaxRightSum = MaxSubSum(A, Center + 1, Right);
MaxLeftBorderSum = 0;
LeftBorderSum = 0;
for (i = Center; i >= Left; i--)
{
LeftBorderSum += A[i];
if (LeftBorderSum > MaxLeftBorderSum)
MaxLeftBorderSum = LeftBorderSum;
}
MaxRightBorderSum = 0;
RightBorderSum = 0;
for (i = Center + 1; i <= Right; i++)
{
RightBorderSum += A[i];
if (RightBorderSum > MaxRightBorderSum)
MaxRightBorderSum = RightBorderSum;
}
return Max(MaxLeftSum, MaxRightSum, MaxLeftBorderSum + MaxRightBorderSum);
}
/*Main函数输出最终结果,无实意*/
int main(int argc, char * argv[])
{
int array[10] = { 4, -3, 12, 9, -7, 15, -16, 2, 8, -1 };
int max = MaxSubSum(array, 0, 9);
printf("What...\n");
printf("max = %d" , max);
}
Center = (Left + Right) / 2;
MaxLeftSum = MaxSubSum(A, Left, Center);
MaxRightSum = MaxSubSum(A, Center + 1, Right);
Center = 2;
MaxLeftSum = MaxSubSum(array, 0, 2);
Center = 1;
MaxLeftSum = MaxSubSum(array, 0, 1);
Center = 0;
MaxLeftSum = MaxSubSum(array, 0, 0);
MaxRightSum = MaxSubSum(array, 0, 1);
MaxRightSum = MaxSubSum(array, 0, 1);
应该是
MaxRightSum = MaxSubSum(array, 1, 1);
这种错误都没发现,看来根本没人愿意耐心帮忙解决问题。结贴吧。