結對開發2//返回一個二維整陣列中最大子陣列的和
阿新 • • 發佈:2018-11-07
題目:返回一個二維整數陣列中最大子陣列的和
要求:1.輸入一個二維整型陣列,數組裡有正數也有負數
2.二維陣列中,連續的一個子矩陣組成一個子陣列,每個子陣列都有一
3.求所有子陣列和的最大值
同組人:曹建濤
源程式:
#include "stdafx.h" #include <stdio.h> int MAX(int a, int b)//求最大值 { if (a > b) return a; else return b; } int main(void) { int a[3][6] = { { 5, 6, -3, 8, -9, 2 }, { 1, -12, 20, 0, -3, -5 }, { -9, -7, -3, 6, 7, -1 } };//初始化陣列 printf("array a:\n"); for (int i = 0; i<3; i++) { for (int j = 0; j<6; j++) { printf("%5d", a[i][j]); } printf("\n"); } int i, j, m, n, sum; //n為行,m為列,mn為子陣列的左上角元素 int p[3][6]; //a[i][j]為子陣列的右下角元素,p[i][j]為子陣列各元素之和 int max = a[0][0]; for (n = 0; n < 3; n++) { for (m = 0; m < 6; m++) { for (i = n; i < 3; i++) { for (j = m; j < 6; j++) { if (i == n) { if (j == m) { p[i][j] = a[i][j]; sum = p[i][j]; max = MAX(sum, max); } else { p[i][j] = p[i][j - 1] + a[i][j]; sum = p[i][j]; max = MAX(sum, max); } } else { if (j == m) { p[i][j] = p[i - 1][j] + a[i][j]; sum = p[i][j]; max = MAX(sum, max); } else { p[i][j] = p[i][j - 1] + p[i - 1][j] - p[i - 1][j - 1] + a[i][j]; sum = p[i][j]; max = MAX(sum, max); } } } } } } printf("maxsum=%d", max); getchar(); getchar(); return 0; }
執行結果:
總結:
在本次任務中,看似簡單清晰的思路,在程式碼上實踐起來卻遇到了重重困難。最初的想法是遍歷整個子陣列,發現時間複雜度太大,完成起來較為困難。經過和組員一同尋找網路資料,翻閱圖書,找到較為簡便的思路方法,將這個方法逐步呈現在電腦螢幕上。由最初的簡陋的框架,一步步將其完善。最終圓滿完成了老師佈置的任務。從最初的遙不可及到完成任務,是一個完善學習完善自己的一個路程,今後也會不放棄的堅持完成每一次作業,更上一層樓!
我和我小夥伴快樂的寫程式碼的一天