题目:
返回一个二维数组的和最大字数组的和
要求:
随机生成二维数组,要求数组元素有正有负
二维数组首尾相连
数组中连续的n(n>=1)元素组成数组的字数组
源代码:
import java.util.Random;
import java.util.Scanner;
public class erweixunhuanzishuzu {
public static void main(String[] args) {
//产生随机数组
int array[][] = new int[1000][1000];
int arraytemp[] = new int [1000];
int row,col,sum,sumTemp;
int t,m;
int qx=0,qy=0;
int zx=0,zy=0;//分别记录子数列的起始和结束位置
for(int i=0;i<1000;i++)
arraytemp[i]=0;
System.out.print("请分别输入数组的行数和列数:");
Scanner sc=new Scanner(System.in);
row = sc.nextInt();
col = sc.nextInt();
Random r = new Random();
System.out.println("产生的随机数序列为: ");
for(int i=0;i<row;i++){
for(int j=0;j<col;j++){
array[i][j]=r.nextInt()%10;
array[i][j+col]=array[i][j];
}
}
for(int i=0;i<row;i++){
for(int j=0;j<col;j++){
System.out.print(array[i][j]+" ");
if(j == col-1)
System.out.println("");
}
}
//求最大子数组
sum=array[0][0];
sumTemp=sum;
for(int i=0;i<row;i++){
for(int x=0;x<1000;x++)
arraytemp[x]=0;
for(t=i;t>=0;t--){
for(int s=0;s<2*col;s++){
if(t>=0){
arraytemp[s]+=array[t][s];
//qx=t;
//qy=s;
//System.out.println("&"+qx+" "+qy);
//System.out.println("%"+arraytemp[s]+"%");
}
}
sumTemp=arraytemp[0];
m=0;
for(int j=0;j<2*col;j++){//按列消元
if(sumTemp<=0){
sumTemp=0;
m=j+1;
//qx=t;
//qy=j;
//System.out.println("&1 "+qx+" "+qy);
}
//System.out.println("#"+sumTemp+"#");
//System.out.println("*"+arraytemp[j+1]+"*");
if(j+1<qy+col){
sumTemp+=arraytemp[j+1];
if(sumTemp>sum){
sum=sumTemp;
qx=t;
qy=m;
zx=i;
zy=j+1;
//System.out.println("@"+qx+" "+qy);
//System.out.println("%"+zx+" "+zy);
}
}
/*else
break;*/
}
}
}
System.out.println("最大子数组的和为:"+sum);
System.out.println("子数组为:");
for(int i=qx;i<=zx;i++)
for(int j=qy;j<=zy;j++){
System.out.print(array[i][j]+" ");
if(j==zy)
System.out.println("");
}
}
}
结果截图:
编程总结:
现在对于模块化编程逐渐有了自己的理解了,从一开始听说这个概念,只知其然,不知其所以然,经过这几次有关于数组代码的编写,“所以然”逐渐的浮现出来了。
一个新的问题的出现,总能够根据其特点,依据不同的着重点,将一个问题细化成许多“小组件”,解决这些小组件要比直接解决大问题本身要容易的多。
对于此次编程的收获:
看到本次的编程要求,感觉上应该分为两个方面的问题:
1、 实现二维数组的自身“环化”
2、 和最大字数组的求取问题
因为处于对自己水平的了解,我现在需要做的是多吸收别人编程的算法,思想,当然,这只是用来提高自己编程水平的一个阶段,随着这种练习的增加,我相信会有更多的收获和理解的,只要我肯去做,而不是想象着我要去做。
现在有一个初步的体会,许多算法是可以组合起来的,一些以前自己实现过的算法经过合理的安排,就能够解决一个新产生的问题,这是一种源于日积月累解决问题的方法,需要自己长时间的坚持和努力。
我在路上~