二维数组环和最大子数组的和
1.实验要求
随机产生一个二维整形数组,数组里有正数也有负数。
二维数组首尾相接,象个一条首尾相接带子一样。
数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。
求所有子数组的和的最大值。
2.实验思路
先随机产生一个二维数组;
二维数组的第一列移动到最后一列,求最大的子数组和;
二维数组的第一列移动到最后一列,求最大的子数组和;
二维数组的第一列移动到最后一列,求最大的子数组和;
······
直到循环完毕。
3.完整代码
package 二维环;
import java.util.Random;
import java.util.Scanner;
public class b {
public static void main(String[] args) {
// TODO Auto-generated method stub
int a[][];
int i,ii,j,jj,l,h,n,nn,k,kk,sum,max=0;
///随机产生一个数组
Scanner scanner = new Scanner(System.in);
System.out.print("输出随机产生的数组的长度:");
h=scanner.nextInt();
System.out.print("输出随机产生的数组的高度:");
l=scanner.nextInt();
scanner.close();
a=new int[l][h];
for(i=0;i<l;i++)
{
for(j=0;j<h;j++)
{
Random random = new Random();
a[i][j]=random.nextInt(19);
a[i][j]=a[i][j]-9;
System.out.print(a[i][j]);
System.out.print(" ");
}
System.out.println("");
}
for(nn=0;nn<h;nn++)
{
for(ii=0;ii<l;ii++)//l行的第一个数放到最好
{
kk=a[ii][0];
for(jj=0;jj<h-1;jj++)//每一行的第一个数放到最好
{
a[ii][jj]=a[ii][jj+1];
}
a[ii][jj]=kk;
}
System.out.println("将数组的第一列放到最后一列: ");
for(i=0;i<l;i++)/////////aaa输出动后的数组
{
for(j=0;j<h;j++)
{
System.out.print(a[i][j]);
System.out.print(" ");
}
System.out.println("");
}////////////////////////aaa输出动后的数组
//max=0;
for(n=0;n<l;n++)
{
sum=0;
for(i=0;i<l-n;i++)
{
sum=0;
for(j=0;j<h;j++)
{
for(k=i;k<=i+n;k++)
{
sum=sum+a[k][j];
}
//System.out.print(sum);
//System.out.print(" ");
if(sum<0)
{
sum=0;
}
if(max<sum)
{
max=sum;
}
}
}
}
System.out.print("目前求得的最大和的子数组的和为: ");
System.out.println(max);
}
}
}
4.实验截图

浙公网安备 33010602011771号