一、设计思想
1.我们先建立一个新的二维数组b[n][m]
二维数组b[j][k] 存放的是a[j][k](0<=j<n,0<=k<m) 这一点到 a[0][0] 的最大值
2、
具体循环工作:
当循环到a[j][k](0<=j<n,0<=k<m)
则求的是 a[j][k]到 a[0][0] 的最大值
计算方法:
b[j][k]=a[j][k]+b[j-1][k]+b[j][k-1]-b[j-1][k-1]
若b[j][k]<0,则赋值为0;
每次计算完成后,都需要与max进行比较
1 #include<iostream> 2 using namespace std; 3 int main() 4 { 5 int i,j; 6 int a[3][3]={-1,-2,1,-3,4,2,3,20,-5}; 7 int b[3][3]; 8 int max=a[0][0]; 9 for(i=0;i<3;i++) 10 { 11 for(j=0;j<3;j++) 12 { 13 cout<<a[i][j]<<' '; 14 } 15 cout<<endl; 16 } 17 for(i=0;i<1;i++) 18 { 19 b[0][0]=a[0][0]; 20 for(j=0;j<3;j++) 21 { 22 if(a[0][j-1]<0) 23 { 24 b[0][j]=a[0][j]; 25 } 26 else 27 { 28 b[0][j]=b[0][j-1]+a[0][j]; 29 } 30 } 31 } 32 for(i=1;i<3;i++) 33 { 34 for(j=0;j<1;j++) 35 { 36 if(a[i-1][0]<0) 37 { 38 b[i][0]=a[i][0]; 39 } 40 else 41 { 42 b[i][0]=b[i-1][0]+a[i][0]; 43 } 44 } 45 } 46 for(i=1;i<3;i++) 47 { 48 for(j=1;j<3;j++) 49 { 50 if(b[i-1][j-1]<0) 51 { 52 if(b[i-1][j]>=0&&b[i][j-1]>=0) 53 { 54 if(b[i][j-1]>=b[i-1][j]) 55 { 56 b[i][j]=b[i][j-1]+a[i][j]; 57 } 58 else 59 { 60 b[i][j]=b[i-1][j]+a[i][j]; 61 } 62 } 63 else if(b[i-1][j]>=0&&b[i][j-1]<=0) 64 { 65 b[i][j]=b[i-1][j]+a[i][j]; 66 } 67 else if(b[i-1][j]<=0&&b[i][j-1]>=0) 68 { 69 b[i][j]=b[i][j-1]+a[i][j]; 70 } 71 else 72 { 73 b[i][j]=a[i][j]; 74 } 75 } 76 else 77 { 78 if(b[i-1][j]>=0&&b[i][j-1]>=0) 79 { 80 b[i][j]=a[i][j]+b[i-1][j]+b[i][j-1]-b[i-1][j-1]; 81 } 82 else if(b[i-1][j]>=0&&b[i][j-1]<=0) 83 { 84 b[i][j]=a[i][j]+b[i-1][j]-b[i-1][j-1]; 85 } 86 else if(b[i-1][j]<=0&&b[i][j-1]>=0) 87 { 88 b[i][j]=a[i][j]+b[i][j-1]-b[i-1][j-1]; 89 } 90 else 91 { 92 b[i][j]=a[i][j]; 93 } 94 } 95 } 96 } 97 for(i=0;i<3;i++) 98 { 99 for(j=0;j<3;j++) 100 { 101 if(b[i][j]>max) 102 max=b[i][j]; 103 } 104 } 105 cout<<"最大子数组的和为:"<<max<<endl; 106 return 0; 107 }
三、运行截图
四、照片
五、感想
本次设计让我更加深刻的认识到了团队的力量,我们算法确定以后,在编程的时候遇到了难题可以通过讨论将代码实现,比如说我们在循环计算的时候,对如何实现所有的可能性进行了讨论等。