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

一、实现思路

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

二、实验代码

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]);
	}

}

三、实验截图

四、体会心得

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

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

时间: 2024-12-26 00:31:02

结对开发--四实现循环二维数组求最大子数组的和的相关文章

二维环形数组求最大子数组和

一.要求 1.题目: 返回一个二维数组中最大子数组的和. 2.要求: 输入一个二维整形数组,数组里有正数也有负数. 二维数组首尾相接,象个一条首尾相接带子一样. 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 求所有子数组的和的最大值.要求时间复杂度为O(n). 3.结对开发要求: 两人结对完成编程任务. 一人主要负责程序分析,代码编程. 一人负责代码复审和代码测试计划. 发表一篇博客文章讲述两人合作中的过程.体会以及如何解决冲突(附结对开发的工作照). 二.设计思路 1.从键

一维数组求最大子数组(解决溢出问题)

一.题目要求 题目:返回一个整数数组中最大子数组的和. 要求: 要求程序必须能处理1000 个元素: 每个元素是int32 类型的: 输入一个整形数组,数组里有正数也有负数. 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 求所有子数组的和的最大值.要求时间复杂度为O(n). 二.设计思想 程序在宏里面定义出了数组长度的大小,在长度超过100万的时候程序直接崩溃,其实这并不是因为结果太大导致的数值溢出,而是因为内存溢出,我们的数组是定义在程序内部的,属于局部变量,存放位置在栈上

环形数组求最大子数组之和

环形数组求最大子数组之和: 实验要求: 随机产生一个整形数组,假设首尾相连为环形,求其相连的字数组的和,并输出子数组的元素. 设计思路: 因为是环形,所以要考虑自设的头尾的情况,在此分为两大类考虑,一种为数组中存在正数情况,一种为全部为负数的情况: 在存在正数的情况中又可分为三种情况,一种为全部为正数的情况,一种为自设的头元素为正数,最后一种为自设的头元素为负数.根据这几种情况分类进行实现. 在实现过程中,对数组元素从头到尾进行遍历,如果遇到正数即用和相加,直到相邻的下一个为负数,即存放目前该最

结对开发之返回一个二维整数数组中最大联通子数组的和

一.题目要求 输入一个二维整形数组,数组里有正数也有负数.二维数组首尾相接,象个一条首尾相接带子一样.数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和.求所有子数组的和的最大值.要求时间复杂度为O(n)题目:返回一个二维整数数组中最大子数组的和 二.解题思路 先对二维数组进行了重构,形成一个环状二维数组,然后再用求二维数组子矩阵最大和的方法求得最终结果. 三.程序代码 2 #include<iostream.h> 3 int main(int argc, char* argv[]

结对开发之二维环数组求最大子数组的和4

结对成员:信1201-1班    黄亚萍 信1201-1班    袁亚姣 一.题目要求 要求:            输入一个二维整形数组,数组里有正数也有负数.            二维数组首尾相接,象个一条首尾相接带子一样.            数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和.            求所有子数组的和的最大值.要求时间复杂度为O(n)题目:返回一个二维整数数组中最大子数组的和. 二.设计思路 类似于3,将二维数组转化为一维数组来求最大子数组

结对开发,首位相邻的数组求最大子数组

结对人员:张世通 梁世豪 一.题目 返回一维数组中最大子数组的和 输入一个整形数组,数组里有正数也有负数. 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 如果数组A[0]……A[j-1]首尾相邻,允许A[i-1], …… A[n-1], A[0]……A[j-1]之和最大. 同时返回最大子数组的位置. 求所有子数组的和的最大值. 要求时间复杂度为O(n) 二.设计思路 1.在上一次求一维数组最大子数组的问题上,进行拓展,继续使用类似的求和方法 2.通过定义变量start,fin

二维数组求最大子数组

设计思路: 首先定义产生二维数组,定义可输入二维数组行和列,各位数随机产生: 然后进行最大子数组的求和比较,从每行的第一个数为子数组的起点开始进行不同的子数组遍历比较,只存放最大的子数组,以及记录最大子数组的位置,从第一个数开始每行每列进行求和比较,以求得最大子数组的值,以及最大子数组所包含的数: 最后进行结果的输出与验证. 代码: 法一: package zishuzu; import java.util.*; public class zuixiaozishuzu { public stat

二维数组求最大子数组和(环形)

一.实验题目 返回一个二维数组中最大子数组的和. 实验要求: 输入一个二维整形数组,数组里有正数也有负数. 二维数组首尾相接,象个一条首尾相接带子一样. 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 求所有子数组的和的最大值.要求时间复杂度为O(n). 二.实验思路 这次我们设计的实验是手动输入二维数组的行数和列数,二维数组的环形求和我们设计的思路和一位数组的类似,就是把求完的数组的第一列放到最后,依次类推.求最大的子数组和时和二维数组的求和类似,即:输入的二维数组是 -1 

结对开发——环形一维数组求最大子数组和

题目:返回一个整数数组中最大子数组的和.要求:(1)输入一个整形数组,数组里有正数也有负数.(2)数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和.(3)如果数组A[0]……A[j-1]首尾相邻,允许A[i-1], …… A[n-1], A[0]……A[j-1]之和最大.(4)同时返回最大子数组的位置.(5)求所有子数组的和的最大值.要求时间复杂度为O(n).一.设计思想 这个问题的最优解一定是以下两种可能.可能一:最优解没有跨过array[n-1]到array[0],即和非环形数