结对编程实践扩展
程序按照小伙伴 信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循环嵌套的太多了,下去我再找找方法