zoukankan      html  css  js  c++  java
  • 结队开发5----首尾相连数组

    结队成员:范德一,赵永恒

    一.题目

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

    要求:

    输入一个整形数组,数组里有正数也有负数。

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

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

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

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

    二.设计思路

    我们在上次实验的基础上,通过在原有的循环体的最外边再添加了一个循环条件,这个循环条件是在第一次循环之后,将数组中每个数的值赋给它前面一个数,这样在最后一次循环的时候就实现了首尾相连。

    三.实验代码

    #include<iostream.h>
    #include<time.h>
    #include<stdlib.h>
    
    int main()
    {
    	int a[10];
    	int m;              //m是每组个数
        int *sum=new int[10];
    		srand((unsigned)time(NULL));
    	cout<<"*********************************"<<endl;
    	for(int i=0;i<10;i++)
    	{  
    		int b;
    	    b=rand()%2;
    	    switch (b)
    		{
            	case 0:
    		            a[i]=rand()%100;
    		            break;
    	        case 1:
    		            a[i]=-rand()%100;
    		            break;
    		}
    	    cout<<a[i]<<"   ";
    	   /* if((i%10)==4)
    		cout<<endl;   */      //每行10个输出,换行
    	
    	}
    	
    	cout<<"*********************************"<<endl;
    	int he=0;
    for(int t=1;t<11;t++)
    {
    	for(m=1;m<11;m++)
    	{
    		int temp=0;
    		for(int n=0;n<m;n++) 
    		{
    			temp=temp+a[n];
    		}
    		for(int k=0;k<=(10-m);k++)
    		{
    			sum[k]=0;
    			for(int j=k;j<(k+m);j++)  //a[k]是每组第一个数
    			{
    				sum[k]=sum[k]+a[j];
    			}
    			if(sum[k]>temp)
    			{
    				temp=sum[k];	
    			}	
    		}
            if(temp>he)
    		{
    			he=temp;
    		}
    
    	}
        int temp1=0;
    	temp1=a[0];
    	a[0]=a[1];
    	a[1]=a[2];
    	a[2]=a[3];
    	a[3]=a[4];
    	a[4]=a[5];
    	a[5]=a[6];
    	a[6]=a[7];
    	a[7]=a[8];
    	a[8]=a[9];
    	a[9]=temp1;
    }
    	cout<<"最大子数组的和为: "<<he<<endl;
    	cout<<"*********************************"<<endl;
    	return 0;
    }
    

    四.运行截图

    五.实验感想

    关于数组的实验这已经是第四次进行扩展了,现在回想一下,每一次的实验都有一个上一次的基础,第一次实验比较简单,我们也很容易就做了出来,然后在这个第一次实验的基础上,我们一次又一次的加深难度,逐步实现了不同的功能;倘若我们第一次实验的内容就是这样的话,我们肯定不会这么容易完成,这让我再一次体会到了把大目标分解成小目标的好处。

  • 相关阅读:
    怎样改动、扩展并重写Magento代码
    解决Gradle minifyEnabled无法找到错误
    使用Hadoop的MapReduce与HDFS处理数据
    cmake 学习笔记(一)
    简单的日志系统
    WebStorm 7.0 注冊码
    DOS命令大全--具体解释
    SQL SERVER之数据查询
    闰年的定义
    Javascript作用域链
  • 原文地址:https://www.cnblogs.com/myblog1993/p/4378391.html
Copyright © 2011-2022 走看看