二维数组求子数组的最大和(严晓雄 刘三龙)

                                     在这个程序中,我们首先设置了俩个二维数组,a[m][n]和b[m][n]。a[m][n]用来存储输入的数组,数组存入后,

                  我运用for循环依次对数组进行遍历,遍历的过程就是求以当前数为左顶角的所有字数组的最大值,然后将最大值存入坐标相对应的

                  b数组中。对数组a遍历完后再对b数组进行遍历求数组b的最大值max,max值就是所求的最大子数组的值。

下面是程序代码和运行结果:

 

 

#include "stdafx.h"

#include "stdio.h"

int m;

 int max;

 

void Max0(int a[][3])

{

       int i,j,k,m,sum,b[100];

       m=0;

        for(i=0;i<3;i++)

       {  

             

              for(j=0;j<2;j++)

              {  

                     sum=a[i][j];

                     for(k=j+1;k<3;k++)

                     {

                        sum=sum+a[i][k];

                        b[m++]=sum;

                     }

              }

       }

       for(i=0;i<3;i++)

       {  

             

              for(j=0;j<2;j++)

              {  

                     sum=a[j][i];

                     for(k=j+1;k<3;k++)

                     {

                        sum=sum+a[k][i];

                        b[m++]=sum;

                     }

              }

       }

       for(i=0;i<2;i++)

       {  

             

              for(j=0;j<2;j++)

              {  

                     sum=a[i][j]+a[i+1][j];

                     for(k=j+1;k<3;k++)

                     {

                        sum=sum+a[i][k]+a[i+1][k];

                        b[m++]=sum;

                     }

              }

       }

       for(i=0;i<2;i++)

       {  

             

              for(j=0;j<2;j++)

              {  

                     sum=a[j][i]+a[j][i+1];

                     for(k=j+1;k<3;k++)

                     {

                        sum=sum+a[k][i]+a[k][i+1];

                        b[m++]=sum;

                     }

              }

       }

       for(i=0;i<1;i++)

       {  

             

              for(j=0;j<2;j++)

              {  

                     sum=a[i][j]+a[i+1][j]+a[i+2][j];

                     for(k=j+1;k<3;k++)

                     {

                        sum=sum+a[i][k]+a[i+1][k]+a[i+2][k];

                        b[m++]=sum;

                     }

              }

       }

       for(i=0;i<1;i++)

       {  

             

              for(j=0;j<2;j++)

              {  

                     sum=a[j][i]+a[j][i+1]+a[j][i+2];

                     for(k=j+1;k<3;k++)

                     {

                        sum=sum+a[i][k]+a[k][i+1]+a[k][i+2];

                        b[m++]=sum;

                     }

              }

       }

           for(i=0;i<3;i++)

              {  

             

                 for(j=0;j<3;j++)

                     { 

                        b[m++]=a[i][j];

                     }

              }

    max=b[0];

       for(i=0;i<m;i++)

       {

              if(max<=b[i])

              {

                     max=b[i];

              }

       }

 

       printf("最大子数组和为:%d\n",max);

}

      

int main(int argc, char* argv[])

{

       int num[3][3];

       int i,j;

       printf("请输入九个数:\n");

       for(i=0;i<3;i++)

       {

              for(j=0;j<3;j++)

              {

                     scanf("%d",&num[i][j]);

              }

       }

       printf("生成的数组矩阵为:\n");

           for(i=0;i<3;i++)

       {

              for(j=0;j<3;j++)

              {

                     printf("%d     ",num[i][j]);

                     if(j==2)

                                   {

                                          printf("\n\n");

                                   }

              }

             

       }

       Max0(num);

       return 0;

}

 

posted @ 2014-03-18 22:34  情菲得已  阅读(231)  评论(1编辑  收藏  举报