求二维数组最大子数组
生活随笔
收集整理的這篇文章主要介紹了
求二维数组最大子数组
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
結對隊友:胡康臻、楊寒寒
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]+"\t");if(j == n - 1){System.out.print("\n");}}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] + "\t");if(j == weiR){System.out.print("\n");}}sc.close();}}
3、截圖
?
轉載于:https://www.cnblogs.com/shouhutian/p/6679766.html
總結
以上是生活随笔為你收集整理的求二维数组最大子数组的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 最有个性的微信签名
- 下一篇: HTML 标签包含规范,规避脱标流,图