结对开发二——求矩阵子矩阵和的最大

一.开发思路

先设计一个3行4列的矩阵。

然后将12行的每一列相加作为第4行。

将23行的每一列相加作为第5行。

将123行的每一列作为第六行。

然后列出每一行的子数组求出最大值。

最后比较每一行的最大值的大小,求出最终结果。

二.开发代码

#include<iostream.h>
int main()
{
int x,y,n,m;
int s[10][20];
// int a[10][20];
int sum[10][20];
cout<<"请输入3行4列的矩阵:"<<endl; 
int a[][4]={10,-6,-1,3,-7,20,3,7,-2,4,2,-19} ;
for(x=0;x<3;x++)
{
for(y=0;y<4;y++)
{
cout<<a[x][y]<<"\t";
}
cout<<endl;
}

//---------------------------以上是数组的输入

for(y=0;y<4;y++)
{
for(x=0;x<3;x++)
{
s[x][y]=a[x][y];
}
}

for(x=0;x<2;x++)
{
for(y=0;y<4;y++)
{
s[x+3][y]=a[x][y]+a[x+1][y];
}
}

for(y=0;y<4;y++)
{
s[5][y]=a[0][y]+a[1][y]+a[2][y];
}

//---------------------------------------------------

for(x=0;x<6;x++)
{
for(y=0;y<4;y++)
{
sum[x][y]=s[x][y];
}
for(y=0;y<3;y++)
{
sum[x][y+4]=s[x][y]+s[x][y+1];
}
for(y=0;y<2;y++)
{
sum[x][y+7]=s[x][y]+s[x][y+1]+s[x][y+2];
}
for(y=0;y<1;y++)
{
sum[x][y+9]=s[x][y]+s[x][y+1]+s[x][y+2]+s[x][y+3];
}
}

//-------------------------------------------------------------------------
/*
for(x=0;x<6;x++)
{
for(y=0;y<10;y++)
{

if(sum[x][y]==30)
cout<<x<<endl<<y<<endl;
}

}
*/
//----------------------------- 
int max=sum[0][0];

for(x=0;x<6;x++)
{
for(y=0;y<10;y++)
{
if(sum[x][y]>max)
{
max=sum[x][y];
n=x;
m=y;

}
}

}
//--------------------------------------求最大数

if(n<3)
{
cout<<"数组开始行:"<<n+1<<endl<<"数组结束行:"<<n+1<<endl;
}
else
{
n=n%3;
switch(0)
{
case 0:cout<<"数组开始行:"<<n<<endl<<"数组结束行:"<<n+1<<endl;break;
case 1:cout<<"数组开始行:"<<n<<endl<<"数组结束行:"<<n+1<<endl;break;
case 2:cout<<"数组开始行:"<<n<<endl<<"数组结束行:"<<n+2<<endl;break;

}
}

//-----------------------------------------------------------------------------求子数组开始的行
if(m<4)
{
cout<<"数组开始列:"<<m<<endl<<"数组开始列:"<<m<<endl;
}
else if(m>3&&m<8)
{
{
m=m%4;
switch(m)
{
case 0:cout<<"数组开始列:1"<<endl<<"数组结束列:2"<<endl;break;
case 1:cout<<"数组开始列:2"<<endl<<"数组结束列:3"<<endl;break;
case 2:cout<<"数组开始列:3"<<endl<<"数组结束列:4"<<endl;break;
case 3:cout<<"数组开始列:1"<<endl<<"数组结束列:3"<<endl;break;

}
}
}
else if(m>7)
{
m=m%8;
switch(m)
{
case 0:cout<<"数组的开始行:2"<<endl<<"数组的结束列:4"<<endl;break;

case 1:cout<<"数组的开始行:1"<<endl<<"数组的结束列:4"<<endl;break;
}
}

cout<<"最大的子数组和为:max="<<max<<endl;

return 0;

}

三.开发结果截图

四、结对的总结

发现这个程序的思路是非常简单的便想出来了,但是在编写成旭过程中最麻烦的就是各中计算几次循环从第几进行循环,然而又一个伙伴,既可以轻松的度过这个问题。

而且在开发的最后阶段,伙伴给我了好多建议比如输出最大子矩阵,虽然是让我更加麻烦的进行对程序的修改,但是让程序更加完善化和实用性。在结对的过程中需要彼此的默契和理解,还要有与人沟通的能力,在编写的过程中差点因为一点点的小毛病而无法进行,我认为我们仍需改进。

时间: 2024-12-17 06:06:30

结对开发二——求矩阵子矩阵和的最大的相关文章

结对开发(求二维首尾相接数组的最大子数组和)

一.题目要求 输入一个二维整形数组,数组里有正数也有负数. 二维数组首尾相接,象个一条首尾相接带子一样. 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 求所有子数组的和的最大值. 要求时间复杂度为O(n)题目:返回一个二维整数数组中最大子数组的和 一.设计思想 求环形二维数组最大子数组的和,可以转化为求一维数组最大子数组的和 我们有一个最初的二维数组a[n][n]找它的 最大子数组之和 1.我们先建立一个新的二维数组b[n][2*n-1], 2,这个新的二维数组就是将初始的二

结对开发之求任意一个数组的最大子数组

一.题目: 返回一个整数数组中最大子数组的和. 要求: 1.输入一个整形数组,数组里有正数也有负数. 2.数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 3.求所有子数组的和的最大值.要求时间复杂度为O(n). 二.设计思想. 将接收的数组放到a[i],将接收的数组中的所有子数组的和放到b[i]中,然后找出最大值max,即为该数组的最大子数组和. 将最大值的脚标放到s[i]中,求出 最大子数组的首个数字的脚标s[i],与连续相加数字的个数t[i]. 三.代码. #include

软件工程结对开发之求二维数组中连续最大子数组之和2

一.题目要求 题目:返回一个二维整数数组中最大子数组的和. 要求: 输入一个二维整形数组,数组里有正数也有负数. 二维数组首尾相接,象个一条首尾相接带子一样. 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 求所有子数组的和的最大值.要求时间复杂度为O(n). 二.设计思路 先调用以前求二维最大连续子数组之和的maxSubArray函数求一个首尾不相邻的二维最大连续子数组之和,接着用将第k列各元素左移一列可以再求一个最大连续子数组之和 ,循环m次(因为原二维数组有m列)求得每个

结对开发---二维数组

结对: 严雅芳 20132988 王欣欣 20132990 (1)设计思路: 二维数组的求子数组的最大和,在本次设计中利用了一维数组的思路:从第一个数开始把数组相加,每加一个数对和进行判断,如果小于零,抛弃当前值,如果大于零,下一个数与零比较,小于零时,先将最大值与之前的和比较,在让和加上这个数,如果大于零,直接让和加上这个数,再取最大值和和之间的最大值.因为是二维数组:当到第n行时,对第n行和其前面的n-1.n-2.....0行进行设计,让第n行和其前面列数相同的每1.2.3....n行的数相

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

一.团队成员: 檀威,陈志利 二.项目名: 求一个数组中连续最大子数组之和 三.我们的设计思路: 设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]来做

3、软件工程结对开发之求一维数组中连续最大子数组之和并判断溢出

一.题目要求 题目:返回一个整数数组中最大子数组的和. 要求: 要求程序必须能处理1000 个元素: 每个元素是int32 类型的: 输入一个整形数组,数组里有正数也有负数: 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和: 求所有子数组的和的最大值.要求时间复杂度为O(n): 结果溢出之后能判断. 二.设计思想 在我们的前一个程序中,由于int类型rand()随机产生数范围是0~32767,所以产生的1000个数较小,不会产生溢出.但我们通过查资料得知int32最大数是2147

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

一.题目要求 题目:返回一个整数数组中最大子数组的和. 要求: 输入一个整形数组,数组里有正数也有负数. 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 如果数组A[0]……A[j-1]首尾相邻,允许A[i-1], …… A[n-1], A[0]……A[j-1]之和最大. 同时返回最大子数组的位置. 求所有子数组的和的最大值.要求时间复杂度为O(n). 二.设计思想 三.代码 四.截图 五.总结 六.工作合影

结对开发之求最大数组溢出问题

一.要求 1.题目: 返回一个整数数组中最大子数组的和. 2.要求: 要求程序必须能处理1000 个元素: 每个元素是int32 类型的: 输入一个整形数组,数组里有正数也有负数. 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 求所有子数组的和的最大值.要求时间复杂度为O(n). 二.设计思路 三.代码 四.实验截图 五.总结

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

一.题目要求 题目:返回一个整数数组中最大子数组的和. 要求: 要求程序必须能处理1000 个元素: 每个元素是int32 类型的: 输入一个整形数组,数组里有正数也有负数: 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和: 求所有子数组的和的最大值.要求时间复杂度为O(n): 结果溢出之后能判断. 二.设计思想 在求最大连续子数组时同样用动态法,对于新增的要求,可以增大随机产生数的倍数,如果结果溢出则输出溢出提示字样,其中int类型rand()随机产生数范围是0~32767,i