二维数组

一、设计思想

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 }

三、运行截图

四、照片

五、感想

     本次设计让我更加深刻的认识到了团队的力量,我们算法确定以后,在编程的时候遇到了难题可以通过讨论将代码实现,比如说我们在循环计算的时候,对如何实现所有的可能性进行了讨论等。

原文地址:https://www.cnblogs.com/cuipengbo/p/4357695.html