1. 程式人生 > >求二維陣列最大連續子陣列

求二維陣列最大連續子陣列

#include "stdafx.h"
#include "stdio.h"
#include "stdlib.h"

int _tmain(int argc, _TCHAR* argv[])
{	
	int x[3][3] = {0};
	int sum = 0;
	int max = 0;
	int i = 0;
	int j = 0;
	//賦值
	for (i = 0; i<3; i++)
	{
		for (j = 0; j<3;j++)
		{
			x[i][j] = rand()%20-10;
			printf("%d\t",x[i][j] );
		}		
	}
	//迴圈
	int M = x[0][0];
	for (i = 0; i<3; i++)
	{
		int y = i;
		do
		{
			for (j = 0; j<3; j++)
			{
				for (int u = i; u >= y; u--)
				{
					sum =sum+ x[j][u];
//printf("\t%d", u); } max = max + sum; if (max >= M) { M =max; } if (max<0) { max = 0; } sum = 0; } y--; max = 0; } while (y >= 0); } printf("\n連續最大子陣列之和:"); printf("%d\n", M); return 0; }

       

        其實剛開始的時候思路還是上次一維陣列連續最大子陣列求和時的思路,用兩個陣列分別存最大和和當前的和,區別是二維陣列的話需要在一行完結時進行處理,判斷第一行之和是否為正數,否則兩個陣列歸零重新累加判斷,所謂思路就還是連續相加把最大和放入max然後用new比較將更大的和放入max,最後輸出.我認為自己思路是正確的,但用c語言的時候遇到了一些問題,比如怎麼把二維陣列隨機出的具體值直接運算,但始終解決不了具體的迴圈的問題,之後我們就在網上查詢去看其他人的方法,有很多,但其中找到了一個和我們思路相同的前輩的語句,不得不說我們確實忽視了do while 的運用和具體如何實現迴圈的問題,簡潔直接能切中要害確實是需要學習和改進的地方.

         這次思考是上一次的延伸,不過也確實感覺到軟體工程這門課越來越難,這次程式程式碼不多,但寫出來不容易,程式設計得要好好動腦子才可以.