zoukankan      html  css  js  c++  java
  • 二维数组求最大值

     设计思想:
          首先要用一段代码,可以读入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文件截图:

    运行结果截图:

     

    项目计划总结:

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

  • 相关阅读:
    名字匹配(水题)
    奇怪的键盘
    杰杰的键盘
    Windows Message Queue(优先队列)
    筛法求素数
    会场安排问题(贪心)
    Sail
    Elevator
    Lowest Bit
    File Searching
  • 原文地址:https://www.cnblogs.com/zhs20160715/p/9822474.html
Copyright © 2011-2022 走看看