首页 > 求二维数组最大子数组

求二维数组最大子数组

结对队友:胡康臻、杨寒寒

1、设计思想:

首先定义产生二维数组,定义可输入二维数组行和列,各位数随机产生;

然后进行最大子数组的求和比较,从每行的第一个数为子数组的起点开始进行不同的子数组遍历比较,只存放最大的子数组,以及记录最大子数组的位置,从第一个数开始每行每列进行求和比较,以求得最大子数组的值,以及最大子数组所包含的数;

最后进行结果的输出与验证。

2、代码

import java.util.*;public class zuixiaozishuzu {public static void main(String[] args) {// TODO Auto-generated method stubint m,n,M,N,max,sum;int i,i1,i2,j,j1,j2;int shouL,shouR,weiL,weiR;Scanner sc = new Scanner(System.in);System.out.println("输入二维数组的行数和列数:");m =    sc.nextInt();n = sc.nextInt();System.out.println("输入该二位数组的取值范围(保证第一个数小于第二个数):");M = sc.nextInt();    N = sc.nextInt(); int[][] Shuzu = new int[m][n];for(i = 0;i < m;i++)for(j = 0;j < n;j++){Shuzu[i][j] = N + (int)(Math.random()*(M - N));}System.out.println("该随机二维数组为:");for(i = 0;i < m;i++)for(j = 0;j < n;j++){System.out.print(Shuzu[i][j]+"	");if(j == n - 1){System.out.print("
");}}sum =0;max = Shuzu[0][0];shouL = 0;shouR = 0;weiL = 0;weiR = 0;i = 0;for(j = 0;j < n;j++){i1 = i;for(j1 =j;j1 < n;j1++){i2 = i;for(j2 = j;j2 <= j1;j2++){sum += Shuzu[i2][j2];if((j2 == j1)&&(i2 < i1)){i2++;j2 = j;}else if(j2 == j1&&i2 == i1){break;}}if(max < sum){max = sum;shouL = i;shouR = j;weiL = i1;weiR = j1;}sum = 0;if(j1 == n -1 && i1 < m -1){i1++;j1 = j;}else if(j1 == n-1 && j1 == m - 1){break;}}if(j == n - 1 && j < m - 1){i++;j = 0;}else if(j == n - 1 && j == m - 1){break;}}        System.out.println("最大子数组和为:");System.out.println(max);System.out.println("最大子数组为:");for(i = shouL;i <= weiL;i++)for(j = shouR;j <= weiR;j++){System.out.print(Shuzu[i][j] + "	");if(j == weiR){System.out.print("
");}}sc.close();}}

3、截图

 

转载于:https://www.cnblogs.com/shouhutian/p/6679766.html

更多相关:

  • 学习目标:了解什么是数组;数组如何访问内存地址(一维,二维);什么是数组是由相同类型的元素的集合所组成的数据结构,分配一块连续的内存来存储。利用元素的索引可以计算出该元素对应的存储地址。 最简单的数据结构类型是一维数组。数组如何实现随机访问?数组是一种线性表数据结构,用一直连续的内存空间来储存一组具有相同类型的数据。根据数组的特性(连...

  • 一、静态数据及动态数组的创建     静态数据:               int a[10];             int a[]={1,2,3};             数组的长度必须为常量。     动态数组:             int len;             int *a=new int...

  • 给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度。 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。 元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。 示例 1: 给定 nums = [3,2,2,3], val...

  • 给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。 示例 1: 给定数组 nums = [1,1,2],  函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2...

  • 文章目录1. 数组的声明2. 数组元素的遍历3. 数组的截取4. Go 语言的切片5. 数组 和 切片的共同点...

  • #include #include #include #include #include #include #include

  • 题目:表示数值的字符串 请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100"、"5e2"、"-123"、"3.1416"、"0123"及"-1E-16"都表示数值,但"12e"、"1a3.14"、"1.2.3"、"+-5"及"12e+5.4"都不是。 解题: 数值错误的形式有多种多样,但是正确的...

  • 加法伺候  //超过20位数值相加---------------------------------------- function bigNumAdd(a, b) {if (!(typeof a === "string" && typeof b === "string")) return console.log("传入参数必...

  • 业务场景: 从中文字句中匹配出指定的中文子字符串 .这样的情况我在工作中遇到非常多, 特梳理总结如下. 难点: 处理GBK和utf8之类的字符编码, 同时正则匹配Pattern中包含汉字,要汉字正常发挥作用,必须非常谨慎.推荐最好统一为utf8编码,如果不是这种最优情况,也有酌情处理. 往往一个具有普适性的正则表达式会简化程...

  • 简单record 一下 #include // 'struct sockaddr_in' #include #include // 'struct ifreq' and 'struct if_nameindex' #include #inc...