二维数组求最大值

Posted zhs20160715

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二维数组求最大值相关的知识,希望对你有一定的参考价值。

 设计思想:
      首先要用一段代码,可以读入txt文件里的二维数组。需要将txt文件放入同一目录。 
      其次要用一段代码得到最大子数组的和:主要思路与求一维数组方法相差不多,不过要有更多的循环和判断汲取了先者的成果,我们得出了方法。思路如下:

   1.得到子数组的最大行、列数,从第一行开始,确定最大子数组的行列范围。

   2.将确定的范围,把最大子数组按照一列有几个数,按行分开成。(例如第一个组中只有一行,而第二个组中有两行,列数和数组的列数保持一致)

   3,对2中得到的数组,利用一维数组求子数组之和的方法。求出最大值,比较得到最大的一个

   4.使行列的最大上界下减1,重复进行第2 、3、4步。
源程序代码:
#include<iostream>
#include <stdio.h> 
using namespace std;

FILE *fpRead=fopen("input.txt","r");

char cgetchar(){
	char c;
	fscanf(fpRead,"%c",&c);
	return c;
}

int getnum(){
	char c;
	int num = 0, fuhao = 1;
	while((c = cgetchar()) != EOF && (‘0‘ > c || ‘9‘ < c) && c != ‘-‘);
	if(c == ‘-‘) fuhao = -1;
	else num = c - ‘0‘;
	while((c = cgetchar()) != EOF && ‘0‘ <= c && ‘9‘ >= c){
		num = num * 10 + c - ‘0‘;
	}
	return num * fuhao;
}

int main ()
{
    int x,y,i,j,m=0,A[100][100];
 
    x = getnum();
	y = getnum();
    if(x>100||y>100)
    {
        cout<<"请重新输入:";
        cin>>x>>y;
    }
    for(i=0;i<x;i++)
    {
        for(j=0;j<y;j++)
        {
            A[i][j] = getnum();
            printf("%d ", A[i][j]); 
        }
        printf("
");
 
    }
    int sum[100]={0},max=0,result=A[0][0];
 
    for(i=0;i<x;i++)//确定子数组的最大上界(为第i行)
    {
        while(m+i<x)//确定子数组有m+i行
        {
            //把子数组当成一位数组一样,求最大子数组的和
            for(j=0;j<y;j++)
            {
                sum[j]=sum[j]+A[m+i][j];
 
            }
            max=0;
            for(j=0;j<y;j++)
            {
                if(max+sum[j]>sum[j])
                {
                    max=max+sum[j];
                }
                else
                {
                    max=sum[j];
                }
                if(max>result)
                {
                    result=max;
                }
            }
            m++;//是子数组的行数+1
        }
		m=0;
		for(j=0;j<y;j++)
		{
			sum[j]=0;
		}
	}
	cout<<result;
	return 0;
}

input.txt文件截图:

技术分享图片

技术分享图片

运行结果截图:

技术分享图片 

项目计划总结:

技术分享图片

我和队友的合照(张洪胜  苏雄)

技术分享图片











以上是关于二维数组求最大值的主要内容,如果未能解决你的问题,请参考以下文章

求二维数组最大子数组

PHP如何取二维数组中的某列的最大值和最小值?

二维数组最大联通子数组和

数组问题求二维整型数组最大联通子数组的和

c++返回二维数组的最大元素和它所在的行、列号?

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