题目:返回一个二维整数数组中最大子数组的和

要求:1.输入一个二维整型数组,数组里有正数也有负数。

2.二维数组中连续的一个子矩阵组成一个子数组,每个子数组都有一个和。

3.求所有子数组的和的最大值。

设计思想: 二维数组求最大子数组可以简化成多个一维数组比较求最大 。

1.首先在用户输入行数列数以及相应二维数组后,即确定了数组列数的最大上界,从第一列开始确定最大子数组范围。

2.对于规定好的最大子数组的范围,把数组分成几组有不同的列的数组(如第一组只有一列,第二组有两列等,而行数则和原数组的行数相同)。

3.对于以上产生的几个数组,用一维数组求子数组之和最大值的方法,依次求出最大值,比较,保留最大的。

4.然后从最大上界依次减小,重复以上步骤。

源代码为:

 1 #include<iostream>
 2 #include<stdlib.h>
 3 using namespace std;
 4
 5 void main ()
 6 {
 7     int x,y,i,j,m=0;
 8     cout<<"Please enter the number of rows for an array:";
 9     cin>>x;
10     cout<<"Please enter the number of columns in the array:";
11     cin>>y;
12     int *A = new int[x*y];
13     cout<<"Enter the array:"<<endl;
14     for(i=0;i<x;i++)
15     {
16         for(j=0;j<y;j++)
17         {
18             cin>>A[i*y+j];   //表示第i行第j列元素(注意i乘的是列数)
19         }
20     }
21     int sum[100]={0},MaxSum=A[0];
22     //以列为基准进行循环(即先竖着加)
23     for(j=0;j<y;j++)       //确定子数组的列数(用输入的y确定)
24     {
25         for(m=0;m<y;m++)       //确定子数组有j(j不超过y-m)行
26         {
27             for(i=0;i<x;i++)
28             {
29                 sum[i]=sum[i]+A[i*y+(m+j)];
30             }
31             int max=0;   //初始化定义一个值为零的max
32             for(i=0;i<x;i++)
33             {
34                 if(max+sum[i]>sum[i])
35                 {
36                     max=max+sum[i];
37                 }
38                 else
39                 {
40                     max=sum[i];
41                 }
42                 if(max>MaxSum)
43                 {
44                    MaxSum=max;
45                 }
46             }
47         }
48         //初始化sum[i]的值,使子数组最大上界下降1,之后重新循环。
49         for(i=0;i<x;i++)
50         {
51             sum[i]=0;
52         }
53     }
54     cout<<"The sum of the largest subarray is:"<<MaxSum<<endl;
55     system("pause");
56 }

运行截图:

总结与体会:1.最开始,为了确保求和的数组的确是矩阵,我们尝试了用一步一步的循环分别将一行矩阵,二行矩阵,三行矩阵分类相加,类内比较,再类间比较取最大的方法,但是前提是我们输入的原二维数组是3行3列的,这种情况下代码就已经很多了,而一旦数组再有任何变化就要修改整个程序,这种方法的复杂与笨拙就显示出来了。之后,我们在经过观察和总结网上的例子作参考以后,写出了以上源代码,目前为止我们都觉得这样的代码既能满足要求又比较容易理解。

2.学习了如何用new定义二维数组:

以m*n举例:
第一种方法:
int **a = new int*[m];
for(int i=0; i < m; i++)
a[i] = new int[n];
第二种方法:
int* a = new int[m*n];
a[i*n+j]是第i行第j列元素

3.双人结对编程的确可以提高效率,看来以后不仅需要提高自己的能力,更需要多多增强团队合作意识与能力。

合作美图:

( 20163953 关甜欢 20163955 王美仪 )

转载于:https://www.cnblogs.com/guantianhuan/p/9822726.html

返回一个二维整数数组中最大子数组的和(二人结对)相关推荐

  1. 课堂作业:返回一个二维整数组中最大子数组的和

    要求: 1.输入一个二维整形数组,数组里有整数也有负数. 2.二维数组中连续的一个子矩阵组成一个子数组,每个子数组都有一个和. 3.求所有子数组的和的最大值.要求时间复杂度为O(n). 结对编程要求: ...

  2. 返回一个首尾相接的二维整数数组中最大子数组的和

    题目: ·返回一个二维整数数组中最大子数组的和. 要求: ·输入一个二维整形数组,数组里有正数也有负数. ·二维数组首尾相接,象个一条首尾相接带子一样. ·数组中连续的一个或多个整数组成一个子数组,每 ...

  3. 课堂练习:返回一个二维数组中最大子数组的和

    1.题目: 返回一个二维数组中最大子数组的和. 2.要求: 输入一个二维整形数组,数组里有正数也有负数. 二维数组首尾相接,象个一条首尾相接带子一样. 数组中连续的一个或多个整数组成一个子数组,每个子 ...

  4. 求二维整数数组中最大子数组的和(结对作业)

    题目:返回一个二维整数数组中最大子数组的和 要求:(1)输入一个二维整形数组,数组里有正数也有负数. (2)二维数组中连续的一个子矩阵组成一个子数组,每个子数组都有一个和. (3)求所有子数组的和最大 ...

  5. 结对开发——返回一个整数数组中最大子数组的和 (首尾相接版)

    一.题目及题目要求 题目:返回一个整数数组中最大子数组的和. 要求: (1)输入一个整形数组,数组里有正数也有负数. (2)数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. (3)如果 ...

  6. 返回一个整数数组中最大子数组的和---环形数组

    一.题目要求 题目:返回一个整数数组中最大子数组的和. 要求: 输入一个整形数组,数组里有正数也有负数. 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 如果数组A[0]--A[j- ...

  7. 软件工程结对开发——返回一个整数数组中最大子数组的和(JAVA)

    题目:返回一个整数数组中最大子数组的和. 要求: 输入一个整型数组,数组里有正数也有负数: 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和: 求所有子数组的和的最大值.要求时间复杂度为 ...

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

    一.要求: (1)输入一个整形数组,数组里有正数也有负数. (2)数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. (3)如果数组A[0]--A[j-1]首尾相邻,允许A[i-1],. ...

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

    任国庆  张博 之前我们讨论了在一维数组中求最大子数组的和,在此基础上我们开始讨论二维数组的最大子数组. 求二维数组的最大子数组思想是建立在以为数组.首先将数组的第一列看成一个一维数组,找到该列的最大 ...

最新文章

  1. Google把AI芯片装进IoT设备,与国内造芯势力何干?
  2. kalilinux设置开机自启动:update-rc.d -f apache2 defaults
  3. Windows XP安装Python,最高支持到3.4.4,后续版本不支持
  4. 编程的智慧 意外在内网找到的资源
  5. 苹果为了提升销量真是拼:用你的iPhone做最后一件好事
  6. 吃透这份pdf,拿下阿里、腾讯等大厂心仪offer(软件测试岗)
  7. 接管客厅第一步:联想智能音箱体验评测
  8. OpenCV-Python实战(19)——OpenCV与深度学习的碰撞
  9. 检测UDP端口是否开放的命令
  10. win 7更改计算机用户名和密码错误,win7系统一开机就显示用户名和密码错误故障的解决方法...
  11. vue使用 Tinymce富文本编辑器
  12. Technica Engineering
  13. MLCC电容的直流偏压特性 贴片电容
  14. 技术分享 | Online DDL 工具 gh-ost
  15. 澳大利亚域名_澳大利亚域名.au注册要求
  16. 姑娘,你需要台灯吗?
  17. 详解Android如何实现阴影效果
  18. Android手把手教你实现滑动隐藏(GeastureDetector使用)
  19. 使用Kalibr标定相机和IMU(ZED+px4)外参
  20. OneAlert助力车行易提升事件响应效率,保障服务稳定性

热门文章

  1. 深入Python字典的内部实现
  2. context:component-scan扫描使用上的容易忽略的use-default-filters
  3. Salt-Minion配置文件详解
  4. mysql5.6编译
  5. python3生成器_Python3.7之生成器
  6. python假设有三个列表_python基础三(列表和元组)
  7. 下面属于javascript内部对象的有_JavaScript从零开始——面向对象编程(2)
  8. python2020未来前景_2020年Python发展前景如何呢?
  9. php 数据库 自增值,Mysql应用MySql数据库自动递增值问题
  10. Python文件读写模式