结对编程返回整数数组中最大的子数组

#include<iostream>
#include<ctime>
using namespace std;
int main()
{
	cout<<"数1601-2 20163980 \n黄瑞波"<<endl;;
	int m,n=0,star=0,end=0;
	cout<<"1.手动输入数组。\n2.随机生成数组。请选择功能:";//选择自己输入或者随机生成
	cin>>m;
	switch(m)
	{
		case 1:{
		int *p=new int[n];//开辟为n的存储空间
	cout<<"请输入数组的长度:";
	cin>>n;
	if(n<0)
	{
	cout<<"输入的数组长度有误,请重新输入!"<<endl;//判断数据有效性
	return 0;
	}
	cout<<"输入一个"<<n<<"维整型数组:";
	//以下算法代码参考与网络。
	for(int i=0;i<n;i++)
	{
		cin>>p[i];
	}
	int sum=p[0];
   int max_sum=p[0];
   for(int i=1;i<n;i++)
   {
       if(sum>0)    //是否为正数
       {
           sum=sum+p[i];  //是正数,做和。
          if(sum>max_sum) // 并判断是否为最大,是让其赋值给max_sum。
            {
                max_sum=sum;
                end=i;
            }
       }
       else
       {
           sum=p[i];  //是负数,将第i+1个数的值赋值给和值sum
              if(sum>max_sum)//并判断是否为最大,是让其赋值给max_sum。
              {
                 max_sum=sum;
                 star=i;
                 end=i;
              }
       }
   }
   cout<<"最大子数组位置为第"<<star+1<<"个到第"<<end+1<<"个"<<endl;
   cout<<"最大子数组和为"<<max_sum<<endl;
};break;
		case 2:
			{
				int *p=new int[n];
				cout<<"请输入数组的长度:";
		cin>>n;
		if(n<0)
		{
		cout<<"输入的数组长度有误,请重新输入!"<<endl;
		return 0;
		}cout<<"随机数组为:";
		for(int i=0;i<n;i++)
	{
		p[i]=-rand()%4000+2000;
		cout<<p[i]<<" ";
	}
		cout<<endl;
		int sum=p[0];
   int max_sum=p[0];
   for(int i=1;i<n;i++)
   {
       if(sum>0)    //判断是否为正数
       {
           sum=sum+p[i];  //是正数,做和。
          if(sum>max_sum) // 并判断是否为最大,是让其赋值给max_sum。
            {
                max_sum=sum;
                end=i;
            }
       }
       else
       {
           sum=p[i];  //是负数,将第i+1个数的值赋值给和值sum
              if(sum>max_sum)//并判断是否为最大,是让其赋值给max_sum。
              {
                 max_sum=sum;
                 star=i;
                 end=i;
              }
       }
   }
   cout<<"最大子数组位置为:第"<<star+1<<"个到第"<<end+1<<"个"<<endl;
   cout<<"最大子数组和为:"<<max_sum<<endl;
			};break;
	}
	  return 0;
}

  

原文地址:https://www.cnblogs.com/huangrb/p/9784124.html

时间: 2024-10-12 07:25:05

结对编程返回整数数组中最大的子数组的相关文章

用reduce装逼 之 多个数组中得出公共子数组,统计数组元素出现次数

昨天做了一道美团的面试题,要求是给N个数组,找出N个数组的公共子数组. var a = [7,2,3,4,5]; var b = [4,2,3,7,6]; var c = [2,3,3,3,7]; var d = [4,2,3,8,7]; 以上四个数组,有公共子数组2, 3,7 function main(){ var result = []; var arr = arguments[0]; for(var i=1 ; i<arguments.length ; i++){ var arr = a

求一堆数组中最大的子数组

成员:周其范20112794    胡宝月20112827 上课的时候老师布置了这个题目,初一看这个题目,我们讨论的时候就是在想,应该从第一个数开始,一个一个加,一直加到最后一个数,然后从第二个数开始,一个一个加,加到最后一个,以此类推,在比较的过程中,我们需要比较每加一次的数大小,把每比一次的数赋给sum,把最大的数值赋给max.设计的思路就是这样,其实就是需要2个循环嵌套,所以我们的设计代码如下: int max(int list[],int length) { int sum ; int

结对开发——返回整数数组最大子数组和2

返回整数数组最大子数组和2 为了实现“敏捷开发”的目的,老师让我们采取“迭代”的方法进行项目的开发,这不,对于周一的求最大子数组和又有了新的要求,如下: 1.延续上次的要求,这里不再赘余… 2.如果数组A[0]……A[j-1]首尾相连,允许A[i-1],……A[n-1],A[0]……A[j-1]之和最大: 3.同时返回最大子数组的位置: 4.要求程序必须能处理1000 个元素,且每个元素是int32 类型的. 一.实验设计思路 首先实现的是数组首尾相连,先存入数组,再将原数组反向存储形成环形数组

软件工程结对开发之求一个数组中连续最大子数组之和

一.团队成员: 檀威,陈志利 二.项目名: 求一个数组中连续最大子数组之和 三.我们的设计思路: 设sum[i]为以第i个元素结尾且和最大的连续子数组.对于元素i,所有以它前面的元素结尾的子数组的长度都已经求得,那么以第i个元素结尾且它们之和最大的连续子数组要么是以第i-1个元素结尾且它们之和最大的连续子数组加上这个元素,要么是只包含第i个元素,即sum[i] = max(sum[i-1] + arr[i], arr[i]).可以通过判断sum[i-1] + arr[i]是否大于arr[i]来做

用C随机产生的正整数存到数组中,并求数组中的所有元素最大值、最小值、平均值以及各元素之和,及第二大值。

用 C 求一组随机数的第二大值,不能通过对整体排序求得 1 随机产生20个[10 , 50]的正整数存到数组中,并求数组中的所有元素最大值.最小值.平均值以及各元素之和,及第二大值.        int a[20];    int sum = 0; //存储数组元素的和    //为数组赋值    printf("数组中的元素为:\n ");    for (int i = 0; i < 20; i ++) {        a[i] = arc4random() % 41 +

java实现原数组根据下标分隔成两个子数组并且在原数组中交换两个子数组的位置

此类实现:输出一行数组数据,根据输入的下标,以下标位置为结束,将原数组分割成两组子数组.并交换两个子数组的位置,保持子数组中的元素序号不变.如:原数组为7,9,8,5,3,2 以下标3为分割点,分割为子数组一:7,9,8,5.和子数组二:3,2.经过交换算法后的结果应为:3,2,7,9,8,5 有两种交换算法<1>前插法:将子数组3,2另存在一个临时数组中,将原数组7,9,8,5,3,2每一位向后移两个位置  再将子数组3,2插入到移动好元素位置的原数组中.<2>逆置法:将原数组7

26、删除有序数组中的元素,数组仍然有序

删除有序数组中的元素,数组仍然有序 方法一: 删除一个有序数组的一个元素,采用两个数组实现 代码实现: /* 2017年6月19日16:16:31 功能:删除数组中一个数据之后数组依然有序 */ #include"stdio.h" #define M 9 int main() { int a[M] = {1,2,3,4,5,6,7,8,9}; int b[M-1]; int i, j, num; bool flag; printf("请输入将要删除的数据的数值:")

返回一个二维整数数组中的最大子数组之和(环)

要求: 输入一个二维整形数组,数组里有正数也有负数. 二维数组首尾相接,象个一条首尾相接带子一样. 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 求所有子数组的和的最大值. 思路: 根据前几次所做的关于一维及二维数组的思路,将其整合. 把二维数组转换成一维数组,再用求一维数组最大子数组和(环)的方式求解 1 #include<iostream> 2 #include<cstdio> 3 #include<ctime> 4 using namespac

返回一个整数组中的最大子数组的和

#include<stdio.h>#include<stdlib.h>#include<time.h> int main(){    int i,d;    int max=0;    int b=0;    int c [1200];    srand(time(NULL));    for(i=0;i<1200;i++)    {        d=rand()%2;        if(d==0)        {            c[i]=rand(