结对开发四---实现环状二维数组求最大子数组的和

一、实现思路

再上一个实验基础上加上环,我们实现环的思想是每一列依次向此替换,直至替换出能出现的所有的二维数组,再用上一个求最大子数组的方法全部实现

二、实验代码

package com.minirisoft;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.Scanner;

public class HuanTwoArray {
	public static int Exchange(int arr[][],int n,int m)
	{
		int t;
		for(int j=0;j<n-1;j++)
		{
			for(int i=0;i<m;i++)
			{
			t=arr[i][j];
			arr[i][j]=arr[i][j+1];
			arr[i][j+1]=t;
			}
		}
		return 0;
	}
	public static void ShowFirstArray(int arr[][],int n,int m)
	{
		System.out.println("转变后此时的数组为 ");
		for(int p=0;p<n ;p++ )
		{
			for(int q=0;q<m ;q++ )
			{
				System.out.print(arr[p][q]+" ");
			}
			System.out.println();
		}
	}
	public static void ShowArr(int arr[][],int line1,int line2,int row1,int row2)
	 {
	     for(int i=line1;i<=row1;i++)
	     {
	         for(int j=line2;j<=row2;j++)
	         {
	        	 System.out.print(+arr[i][j]+" ");
	         }
	         System.out.println();  
	     }
	 }
	public static int GetSum(int arr[][],int n,int m,int k,int l)
	 {
	    int sum=0;
	    for(int f=n;f<=k;f++)
         {
           for(int h=m;h<=l;h++)
            {
            sum+=arr[f][h];
            }
         }
	    return sum;
	 }
	public static void main(String[] args)
	{
		int sum=0;
		int n;
		int m;
		int k;
		int l;
		Scanner sc=new Scanner(System.in);
		System.out.println("请输入二维数组为几行几列:");
		int x=sc.nextInt();
		int y=sc.nextInt();
		int[][] arr = new int[x][y];//读取出的数组
		int[]max = new int[y];//读取出的数组
		System.out.println("请输入二维数组:");
		for(int p=0;p<x;p++)
		{
			for(int q=0;q<y;q++)
			{
				arr[p][q]=sc.nextInt();
			}
		}
		System.out.println("您二维数组为:");
		for(int p=0;p<x ;p++ )
		{
			for(int q=0;q<y ;q++ )
			{
				System.out.print(arr[p][q]+" ");
			}
			System.out.println();
		}
		int line1=0;
		int line2=0;
		int row2=0;
		int row3=0;
		for(int r=0;r<y;r++)
		{
			max[r]=arr[0][r];
			Exchange(arr,x,y);
			ShowFirstArray(arr,x,y);
		    for(n=0;n<x;n++)
		    {	
		         for(m=0;m<y;m++)
		         {
			         for(k=n;k<x;k++)
			          {
			    	     for(l=m;l<y;l++)
			    	      {
			    		     sum=GetSum(arr,n,m,k,l); 
			    		     if(sum>max[r])
			                  {
			    		    	 max[r]=sum;
			    			    line1=n;                //保存第一个数的行
			    		        line2=k;                //保存第二个数的行
			    			    row2=m;                    //保存第一个数的列
			    			    row3=l;                    //保存第二个数的列
			                   }
			    	      }
			           }
		          }
		    }
		System.out.println("最大子数组的为:");
		ShowArr(arr,line1,row2,line2,row3);
		System.out.println("最大子数组的和为:"+max[r]);
		}
		for(int r=0;r<y;r++)
		{
			if(max[r]>max[0])
			{
				max[0]=max[r];
			}	
		}
		System.out.println("最大子数组的和为"+max[0]);
	}
		 
}          
三、实验截图


四、体会心得

经过这次实验对二维数组的遍历更加了解。我们小对也感觉磨合期已过,合作更加融洽

五、小组成员:杨广鑫、郭健豪

原文地址:https://www.cnblogs.com/tianyaguying/p/4393037.html