刚写了一个计算数组最大子数组和的程序,拉出来展览一下。好长时间没发帖了。

jbz001 2012-12-10 10:18:18
题目是这样的,有一个数组,数组的元素有正有负,数组有很多个子数组。计算子数组和的最大值以及起始和结束的位置。

代码如下:

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

...全文
206 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
兆帅 2013-03-05
  • 打赏
  • 举报
回复
AnYidan 2013-03-04
  • 打赏
  • 举报
回复
发错了
AnYidan 2013-03-04
  • 打赏
  • 举报
回复
complety 2013-03-04
  • 打赏
  • 举报
回复
疯狂的红豆 2013-03-04
  • 打赏
  • 举报
回复
正好最近一段在不断学习算法,学习一下,我也写个去贴博客上
L_chxu 2013-03-04
  • 打赏
  • 举报
回复
SNAKE-SNAKE 2013-03-04
  • 打赏
  • 举报
回复
Qyee16 2013-03-04
  • 打赏
  • 举报
回复
jbz001 2013-03-04
  • 打赏
  • 举报
回复
图灵狗 2012-12-10
  • 打赏
  • 举报
回复
lilianjie001 2012-12-10
  • 打赏
  • 举报
回复
支持一下

69,336

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧