刚写了一个计算数组最大子数组和的程序,拉出来展览一下。好长时间没发帖了。
题目是这样的,有一个数组,数组的元素有正有负,数组有很多个子数组。计算子数组和的最大值以及起始和结束的位置。
代码如下:
代码如下:
// MaxSubArray.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <Windows.h>
const int ARRAY_COUNT = 10; // 数组定义为10个元素
void GetMaxSubArray(int aNum[])
{
int nLeft = 0;
int nRight = 0;
int nMaxSum = aNum[0];
for(int i = 0; i < ARRAY_COUNT; i++)
{
int nCurSum = 0;
for(int j = i; j < ARRAY_COUNT; j++)
{
nCurSum += aNum[j];
if(nCurSum > nMaxSum)
{
nMaxSum = nCurSum;
nLeft = i;
nRight = j;
}
}
}
printf("最大子数组和为%d,起始%d,结束至%d\n", nMaxSum, nLeft, nRight);
for(int nIndex = nLeft; nIndex <= nRight; nIndex++)
{
printf("%d ", aNum[nIndex]);
}
printf("\n");
}
int _tmain(int argc, _TCHAR* argv[])
{
srand(GetTickCount());
int aNum[ARRAY_COUNT] = {0};
for(int nIndex = 0; nIndex < ARRAY_COUNT; nIndex++)
{
aNum[nIndex] = rand() % 21 - 10; // 使数组中的元素从-10到10分布
printf("%d ", aNum[nIndex]);
}
printf("\n");
GetMaxSubArray(aNum);
return 0;
}
...全文


