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

一、实验目的

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

二、要求:

       数组里有整数也有负数。

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

       如果数组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.

时间: 2024-08-05 07:53:26

求最大字数组的和(具体版)的相关文章

首尾相连的二维数组求最大字数组的和

题目: 返回一个二维整数数组中最大子数组的和. 要求: 输入一个二维整形数组,数组里有正数也有负数. 二维数组首尾相接,象个一条首尾相接带子一样. 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 求所有子数组的和的最大值. 思路:从第一行开始,加一行加两行,一直将所有的二维数组转换成几个一维数组,再将上次做的一维数组首尾相接最大字数组合做成函数调用. (1)代码: #include<iostream>using namespace std;#define N 4 void m

课堂测试 求最大字数组和

一.题目:一个有正有负的整数数组里,其中连续的一个或多个整数构成的整数组,有一个和,求最大子数组,要求,时间复杂度为O(n) 二.设计思路: 1.先输入要输入的元素的个数. 2.构建两个INT类型的字数组,一个来存放数字,一个作为临时数组. 3.遇见正数就存放到临时数组里,并继续往下加,只要结果是正就继续存放.直到遇见负数,截断处理. 4.把临时数组里的数排序(不用冒泡,考虑到o(n)),输出. 三.源代码 package shuzuadd; import java.util.Scanner;

环数组求最大子数组的和

在结对开发的过程中,每个人分担不同的任务,由于我们在学习阶段,所以我自己也编写了一段小程序,但是总是缺少一个限制条件,让这段代码停下来,下面这段代码是我的同伴编写的,我只是做了一个测试. #include<iostream> using namespace std; void main() { int length; //数组的个数 int n; //数组变化后的长度 cout<<"请输入数组元素个数:"<<endl; cin>>leng

二维数组和最大字数组求取 2

题目: 返回一个二维数组的和最大字数组的和 要求: 随机生成二维数组,要求数组元素有正有负 二维数组首尾相连 数组中连续的n(n>=1)元素组成数组的字数组 源代码: import java.util.Random; import java.util.Scanner; public class erweixunhuanzishuzu { public static void main(String[] args) { //产生随机数组 int array[][] = new int[1000][

结对开发--求环数组的最大字数组

一.题目要求 题目:返回一个整数数组中最大子数组的和. 要求: 输入一个整形数组,数组里有正数也有负数. 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 如 果数组A[0]……A[j-1]首尾相邻,允许A[i-1], …… A[n-1], A[0]……A[j-1]之和最大. 同时返回最大子数组的位置. 求所有子数组的和的最大值.要求时间复杂度为O(n). 二.设计思路 这次的主要问题在于这次的一位数组要首尾相连,允许A[i-1], …… A[n-1], A[0]……A[j-1]

剑指Offer(Java版)第四十题:在数组中的两个数字,如果前面一个数字大于后面的数字, 则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。 并将P对1000000007取模的结果输出。 即输出P%1000000007

/*在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对.输入一个数组,求出这个数组中的逆序对的总数P.并将P对1000000007取模的结果输出. 即输出P%1000000007 */ import java.util.*; public class Class40 { public int InversePairs(int[] array){ int length = array.length; int P = 0; for(int i = 0; i < lengt

求二维数组中最大子数组的和

一.题目: 返回一个二维整数数组中最大子数组的和. 要求: 输入一个二维整形数组,数组里有正数也有负数. 二维数组中连续的一个子矩阵组成一个子数组,每个子数组都有一个和. 求所有子数组的和的最大值.要求时间复杂度为O(n). 二:结对编程要求: 两人结对完成编程任务. 一人主要负责程序分析,代码编程. 一人负责代码复审和代码测试计划. 发表一篇博客文章讲述两人合作中的过程.体会以及如何解决冲突(附结对开发的工作照). 三:设计思路: 将二维数组的每行轮番逐次相加(包括单行)后看成一维数组,利用求

结对开发--循环一维数组求最大子数组的和

结对人员:韩雪东,高扬 一.设计思路 这次编程我们主要是以以前的程序为基础,在此基础上通过改变数组元素的位置,形成新的数组,并通过调用我们之前找最大值的函数,找出每个数组的最大值,然后经过比较求得结果. 二.源代码 // shuzuhuan0327.cpp : Defines the entry point for the console application. //作者:韩雪东,高扬 //时间:2015/3/27 #include "stdafx.h" #include "

求一维循环数组最大子数组的和

结对成员:信1201-1班 于海洋   袁佩佩 一.题目与要求 题目:返回一个整数数组中最大子数组的和. 要求: 输入一个整形数组,数组里有正数也有负数. 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和.如果数组A[0]……A[j-1]首尾相邻,允许A[i-1], …… A[n-1], A[0]……A[j-1]之和最大. 同时返回最大子数组的位置. 二.设计思路 利用之前的返回一个整数数组最大子数组的和程序的思路,不过这里将数放到一个链表里,首尾相连,来求最大子数组的和. 三.源