课堂练习3 返回一个二维整数数组中最大子数组和
Posted guoshaozhou
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了课堂练习3 返回一个二维整数数组中最大子数组和相关的知识,希望对你有一定的参考价值。
小组成员:陈泽 郭少周
设计流程:
设计要求.:1. 输入一个二维整形数组,数组里有正数也有负数。
2.二维数组中连续的一个子矩阵组成一个子数组,每个子数组都有一个和。
3.求所有子数组的和的最大值。要求时间复杂度为O(n)。
程序设计:定义两个数组w和z,先通过w数组算出最大数,再通过z数组算出最大子数组和。
遇到问题:1.不明确二维数组如何定义。
2.不清楚二维数组最大子数组如何计算。
3.z数组的列数设计上出现问题。
解决方案:1.查找网络资料学习二维数组c语言定义及其相关知识。
2.通过大神指点z数组列数应比w数组列数多一。
3.组员之间能冷静处理相关问题,互相提出建议弥补对方不足点。
编码:
#include <iostream.h>
int main()
{
int w[4][5];//定义出4*5的二维数组
int max;
int s;
int count;
int z[4][6];
cout<<"请写出你的二维数组(4*5)中的元素:"<<endl;
for(int i=0;i<4;i++)
{
for(int j=0;j<5;j++)
{
cin>>w[i][j];
}
}
for(i=0;i<4;i++)
{
count=0;
for(int j=0;j<5;j++)
{
s=0;
for(int l=0;l<5-j;l++)
{
s=s+w[i][j+l];
z[i][count+l]=s;
}
count=count+5-j;
}
}
//求出最大数
max=z[0][0];
for(int j=0;j<6;j++)
{
for(i=0;i<4;i++)
{
s=0;
for(int r=0;r<4-i;r++)
{
s=s+z[r+i][j];
if(max<s)
{
max=s;
}
}
}
}
cout<<"该二维数组的最大子数组和为:"<<max<<endl;
cout<<endl;
return 0;
}
运行结果: 1.输入的数组为:(4*5)
5 7 -4 3 6
2 -5 -6 9 1
3 7 5 4 -7
1 3 5 -5 6
2.计算结果:该二维数组的最大子数组为40
3.计算结果截图:
心得:仔细学习王老师ppt中人与人沟通的方法,提建议的方法,对自己帮助很大,组员之间相互合作工作事半功倍,矛盾轻松化解。另外编程方面还有很大的不足,还需努力。
以上是关于课堂练习3 返回一个二维整数数组中最大子数组和的主要内容,如果未能解决你的问题,请参考以下文章