3 |
二维 数组 |
程序要使用的数组放在一个叫 input.txt 的文件中, 文件格式是: 数组的行数, 数组的列数, 每一行的元素, (用逗号分开) 每一个数字都是有符号32位整数,当然,行数和列数都是正整数。
|
发表一篇博客文章讲述设计思想,出现的问题,可能的解决方案(多选)、源代码、结果截图、总结。
|
发表时间截止到(3月18日)晚20:00。 |
1
求二维数组的矩形数组的最小数组和。
最笨的设计思想:将这个矩形是两个对角顶点组成的。将两个点设为a,b。a表示上面那个顶点,b表示下面那个顶点。将a固定,移动b点直至出二维数组,然后移动a点,再将b点指向a点。这样轮回直到a移出二维数组。
package test3; 2 public class The_thrid_test { 3 public static void main(String[] args) { 4 int a[][]= {{-1,2,3,-4},{-1,2,3,-4},{-1,2,3,-4},{-1,2,3,-4}};//表示一个二维数组 5 int max = a[0][0]; //初始化最大值 6 int sum=0; //定义每个子二维数组的和 7 int as=0,bs=0,n=0,m=0; //定义让矩形的两个对顶点的角标 8 while(n<a.length) { //如果矩形的第一个顶点出了二维数组时跳出循环 9 10 for(int i=n;i<=as;i++) { //计算以不同数字为矩形第一个顶点的多有子二维数组的和 11 for(int j=m;j<=bs;j++) { 12 sum+=a[i][j]; 13 } 14 } 15 16 //让下面的顶点移动 17 bs++; 18 if(bs==a[as].length) { 19 as++; 20 bs=m; 21 } 22 23 //让上面的顶点移动并将移到外面的顶点指向上面的顶点上。 24 if(as==a.length) { 25 m++; 26 if(m==a[n].length) 27 { 28 n++; 29 m=0; 30 } 31 as=n; 32 bs=m; 33 } 34 //比较最大值 35 if(sum>max) 36 max=sum; 37 sum=0; 38 } 39 System.out.println(max); 40 } 41 }