码迷,mamicode.com
首页 > 编程语言 > 详细

求最大字数组的和(具体版)

时间:2015-04-03 00:00:47      阅读:190      评论:0      收藏:0      [点我收藏+]

标签:

一、实验目的

  编写一段代码能够满足求出一个随机给的任意一个数组,并求出其中的最大子数组。

二、要求:

       数组里有整数也有负数。

       数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。

       如果数组A[0]……A[j-1]首尾相邻,允许A[i-1],……A[n-1],A[0]……A[j-1]之和最大。

       同时返回最大子数组的位置。

  求所有子数组的和的最大值。要求时间复杂度为O(n).

三、实验设计思路

  1.随机产生一数组,a[i]=rand()%40-rand()%40;//产生负数来生成一个数组中的值。

  2.定义一个数组,储存连续字数组和的值。i来储存第一个数,j来储存最后一个数。

  3.将字数组的和进行比较,找出最大值,并将下标位置输出。

四、程序源代码

#include<iostream>
#include<time.h>
using namespace std;
#define N 20

void main()
{

int a[N],b[N][N],i,j,s=0,w=0;

srand((int)time(0));//产生随机数

for(i=0;i<N;i++)
a[i]=rand()%40-rand()%40;//产生负数等

for(i=0;i<N;i++)
cout<<a[i]<<" ";//输出数组

for(i=0;i<N;i++)
{
w=0;
for(j=i;j<N;j++)
{
w+=a[j];
b[i][j]=w;
s++;
}
}

int t=0,p1,p2;

for(i=0;i<N;i++)
for(j=0;j<N;j++)
if(b[i][j]>t)
{
t=b[i][j];
p1=i;
p2=j;
}

if(p1==p2)
{
cout<<"最大子数组的和为:"<<t<<endl;
cout<<"其包括的数组元素下标为:"<<p1<<endl;
}
else
{
cout<<"最大子数组的和为:"<<t<<endl;
cout<<"其包括的数组元素下标为:"<<p1<<"~"<<p2<<endl;
}技术分享
}

五、截图

技术分享

六、编程总结(图片形式)

   1. 技术分享

  2.技术分享

    3.技术分享

求最大字数组的和(具体版)

标签:

原文地址:http://www.cnblogs.com/licongzhuo/p/4388571.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!