合作项目2

news/2024/11/7 22:29:38

结组成员:信1201-1柴珏辉 信1201-2邓锐

一、要求

1、题目:

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

2、要求:

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

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

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

程序要使用的数组放在一个叫 input.txt 的文件中,  文件格式是:

数组的行数,

数组的列数,

每一行的元素,  (用逗号分开)

每一个数字都是有符号32位整数, 当然, 行数和列数都是正整数

将上述题目的各个结果转换成图形界面显示。

3、结对开发要求: 

    两人结对完成编程任务。

    一人主要负责程序分析,代码编程。

    一人负责代码复审和代码测试计划。

   发表一篇博客文章讲述两人合作中的过程、体会以及如何解决冲突(附结对开发的工作照)。   

二、设计思路

使用枚举法,遍历所有数据((x,y)代表第x行第y列的数),从(1,1)列开始,到(1,2)时(1,1)+(1,2);到(2,1)时(1,1)+(2,1);到(2,2)时(1,1)+(1,2)+(2,1)+(2,2)……以此类推,计算出这样组成的所有子数组的和,求出其中的最大值及其对应的子数组。数组随机产生,一定范围内可改变行列数。不过写入文件并读取未实现。

三、程序代码

 1 #include<iostream.h>
 2 #include<stdio.h>
 3 #include<stdlib.h>
 4 #include<time.h>
 5 #define N 3   //行数
 6 #define M 5   //列数
 7 void qiuhe(int a[N][M],int &he,int i,int j,int k,int l) //求两个顶点数所确定的矩阵之和,[i,j]为第一个数的下标,[k,l]为第二个数的下标
 8 {
 9     int c,b;
10     he=0;
11     for(c=i;c<=k;c++)
12     {
13         for(b=j;b<=l;b++)
14         {
15             he=he+a[c][b];
16         }
17     }
18 }
19 void display(int a[N][M],int i,int j,int k,int l)  //输出两个顶点数所确定的矩阵,[i,j]为第一个数的下标,[k,l]为第二个数的下标
20 {
21     int b,c;
22     for(c=i;c<=k;c++)
23     {
24         for(b=j;b<=l;b++)
25         {
26             cout<<a[c][b]<<" ";
27         }
28         cout<<endl;
29     }
30 }
31  void main()
32  {
33      int a[N][M];
34      srand((unsigned)time(NULL));
35      int i,j,k,l,hang1=0,hang2=0,lie1=0,lie2=0,max=a[0][0],he=0;
36      for(i=0;i<N;i++)         //对二维数组中的数随机生成
37      {
38          for(j=0;j<M;j++)
39          {
40              a[i][j]=rand()%20-10;         
41          }
42      }
43      for(i=0;i<N;i++)
44      {
45          for(j=0;j<M;j++)           //前两个循环遍历第一个顶点数
46          {
47              for(k=i;k<N;k++)
48              {
49                  for(l=j;l<M;l++)    //后两个循环遍历第二个顶点数
50                  {
51                      qiuhe(a,he,i,j,k,l);
52                      if(he>max)
53                      {
54                          max=he;
55                          hang1=i;
56                          hang2=k;
57                          lie1=j;
58                          lie2=l;
59                      }
60                  }
61              }
62          }
63      }
64      cout<<"原数组:"<<endl;
65      display(a,0,0,N-1,M-1);
66      cout<<"最大子数组(两个顶点坐标("<<hang1<<","<<lie1<<""<<""<<hang2<<","<<lie2<<"))"<<endl;
67      display(a,hang1,lie1,hang2,lie2);
68      cout<<"和为:"<<max<<endl;
69  }

截图:

四、测试

将代码随机产生数组内容部分去掉,改为固定数组,通过修改其中数据进行测试。

1.测试数据

0,0,0,0,0

0,0,0,0,0

0,0,0,0,0

2. 测试数据

1,2,3,4,5

6,7,8,9,10

11,12,13,14,15

3.测试数据

-1,-2,-3,-4,-5

-6,-7,-8,-9,-10

-11,-12,-13,-14,-15

五、心得体会

这次关键问题在于对简单算法的思考。我们开始想到了遍历的方法,即把每种可能性都计算出来再找最大,但是这种方法实现起来势必耗费时间,尤其在数据量加大的时候。我们一时间陷入僵局,暂停了一两天。随后我们从网上搜索了一些方法,又交流了看法,觉得所能想到的简便的算法都有不足之处,最终还是采用遍历的方法,但数组存在txt文件中未实现。他负责编写完程序,然后我复审,最后又一起讨论修改。我改变数据进行了测试。

这次难度提升,对合作也有了进一步的考验。过程中出现过几次分歧,比第一次合作要大些,不过也是互相阐述清楚后综合,小组正在逐步默契。

结组成员照片:

转载于:https://www.cnblogs.com/dr73/p/4364263.html


http://www.niftyadmin.cn/n/917663.html

相关文章

program is a serialization procedure

Today , I get it . program is a serialization procedure, Tulin support. Mark.

ARQC与ARPC的生成和校验方法

ARQC&#xff1a;authenticate request cryptogram,授权请求报文 ARPC:authenticate response cryptogram,授权响应报文 AC:application cryptogram,应用密文 AAC:application authenticate cryptogram,应用认证密文 TC:transaction certificate,交易证书 ATC:application tran…

java爬虫入门第二弹——通过URL下载图片(以下载百度logo为例)

简单介绍一下&#xff1a; 老王是个新人&#xff0c;心血来潮想用java试试写爬虫&#xff0c;完全零基础&#xff0c;搜了很多教程&#xff0c;往往因为作者水平太高&#xff0c;不能一下子理解大佬代码中的深意&#xff0c;并且有些看似很简单的东西&#xff0c;对于我这种菜…

mysql metadata lock(三)

前言 MDL锁主要用来保护Mysql内部对象的元数据&#xff0c;通过MDL机制保证DDL与DML以及SELECT查询操作的并发。MySQL Meta Lock(一)和MySQL Meta Lock(二)已经讲了一些关于MDL知识&#xff0c;本文将会对MDL进行一个补充&#xff0c;并解释查询堵塞和mysqldump获取一致性备份的…

java爬虫入门第三弹——正则表达式简单应用(抓取豆瓣读书信息并以文本文件输出)

简单介绍一下&#xff1a; 老王是个新人&#xff0c;心血来潮想用java试试写爬虫&#xff0c;完全零基础&#xff0c;搜了很多教程&#xff0c;往往因为作者水平太高&#xff0c;不能一下子理解大佬代码中的深意&#xff0c;并且有些看似很简单的东西&#xff0c;对于我这种菜…

Java学习基础知识

J2SEJava的标准开发平台。是J2EE和J2ME的基础,Core Java开发基于该平台 J2EEJava的企业己开发平台,Java的主要应用方向,大型系统的开发都是在该平台的完成,Web开发也属于其中的一部分 J2MEJava的微系统开发平台,是一个正在成长的平台,主要用于资源有限的设备上的Java的…

为Windows 7的winsxs目录瘦身,谨慎。

刚使用Win7 系统不久&#xff0c;前段时间在清理系统垃圾时发现&#xff0c;win7系统的windows文件夹下的winsxs 文件夹占用空间很大&#xff0c;想清理之&#xff0c;却提示无权限无法清理。随即在网上查了个到底&#xff0c;原来winsxs是一个超大的文件仓库&#xff0c;系统所…

Java 反射基础

语言对自身的一个检验实现: import java.lang.reflect.Method;import java.util.Stack; public class HelloWord