结对编程实践扩展

程序按照小伙伴 信1201-1班 曹坤的思路已经实现了,下面是我的思路,

首先从二维数组第一个点a[0][0]开始,找所有可能和他组成子数组的点,记录下子数组的和,然后选择和a[0][0]挨着的点依次类推,结果就是求得所有可能情况的子数组的和;找出最大的~

我的程序没能成功实现

程序源代码;

#include <iostream>
using namespace std;
void maxSubArray(int **,int ,int ,int []);
int main()
{
  int n,m;
  
  printf("请输入二维数组的行数和列数:\n");
  scanf("%d %d",&n,&m);
  int i,j;
  int *c=new int[(m*n*(m*n-1))];
  int **a=new int*[n];
  printf("请输入%d*%d个二维数组元素:\n",n,m);
  for(i=0;i<n;i++)
  {
    a[i]=new int[m];

    for(j=0;j<m;j++)
    {
      scanf("%d",&a[i][j]);
    }
  }
  maxSubArray(a,n,m,c);
  
  return 0;
}
void maxSubArray(int **a,int n,int m,int c[])
{
	int d=0;
	int result=0;
	for(int a1=0;a1<n;a1++) {
		for(int b1=0;b1<m;b1++){
			for(int a2=a1+1;a1<n;a2++){
				for(int b2=b1+1;b2<m;b2++){
					int sum=0;
					for(int a3=a1;a3<=a2;a3++){
			        	for(int b3=b1;b3<=b2;b3++){
			        		sum+=a[a3][b3];			        							
				         }
                    }
                    c[d]=sum;
                    d++;
					
				}
			}
			
		}
	}
	for(int a4=0;a4<d;a4++){
		if(result<c[d])
		result=c[d];
		
	}
	 printf("二维数组的最大子数组之和是:%d\n",result);
 
}

  运行截图

可能是for循环嵌套的太多了,下去我再找找方法

posted @ 2015-03-22 18:03  花总总  阅读(147)  评论(1编辑  收藏  举报