标签:
一.题目:
返回一个整数数组中最大子数组的和。
要求:
1.输入一个整形数组,数组里有正数也有负数。
2.数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。
3.求所有子数组的和的最大值。要求时间复杂度为O(n)。
二.设计思路
1.数组num[]长度已确定是N,将数组中字数组的和放到数组sum[]中
2.sum[0]=num[0],sum[1]=num[0]+num[1],sum[2]=num[0]+num[1]+num[2]……
sum[N]=num[1],sum[N+1]=num[1]+num[2]……如此循环,直至所有自己的和全部存进 数组sum中。
3.然后求出数组sum中的最大值,再输出结果。
三.源代码
// 求和.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include"iostream.h"
#define SIZE 5 //数组的个数
#define MAXSIZE 100 //子集个数的最大值
void CaculateSum(int sum[],int length,int num[])//计算数组中各个子集的和
{
int j=0;
for(int i=0;i<SIZE;i++)
{
for(int k=i;k<SIZE;k++)
{
if(i==k)
{
sum[j]+=num[k];
}
else
{
sum[j]=sum[j-1]+num[k];
}
j++;
}
}
}
//求所有情况的个数
int GetAcc()
{
int acc=0;
for(int i=1;i<=SIZE;i++)
{
acc+=i;
}
return acc;
}
//找出数组中的最大值,length是b[]中的个数
int GetMax(int b[],int length)
{
int max=b[0];
for(int i=0;i<length;i++)
{
if(max<b[i])
{
max=b[i];
}
}
return max;
}
int main()
{
int num[SIZE],sum[MAXSIZE],max=0,acc;
int count[2]={0,0}; //num[num]是要求的整数count[2]中是负数和正数的个数
cout<<"请输入"<<SIZE<<"个整数:";
for(int i=0;i<SIZE;i++) //计算数组中正数和负数的个数
{
cin>>num[i];
if(num[i]<0)
count[0]++; //负数的个数
else
count[1]++; //正数
}
acc=GetAcc();
for(i=0;i<acc;i++)
{
sum[i]=0;
}
if(count[0]==0) //若全是正数的话
{
for(int i=0;i<SIZE;i++)
{
max+=num[i];
}
}
else if((count[1]==0)||(count[0]==1)) //若全是负数或者有一个正数
{
max=GetMax(num,SIZE);
}
else //其他情况
{
CaculateSum(sum,acc,num);
max=GetMax(sum,acc);
}
cout<<"最大子集的和是:"<<max<<endl;
return 0;
}
四.运行结果及截图






五.结对开发的感想
1.自己负责写代码,当自己写完交给队友之后,检查错误用的时间比较短,如果要是自己检查的话花的时间可能比较长,因为这是自己写的,当你检查的时候会不自觉的和当时编写代码的思想重合,可能就会漏掉一些逻辑上的错误。而自己的搭档则能客观的检查。
六.工作照
2.
标签:
原文地址:http://www.cnblogs.com/menglikanhualuo/p/4348339.html