zoukankan      html  css  js  c++  java
  • 结对开发2

    题目:返回一个二维整数数组中最大子数组的和。

    要求:输入一个整形数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。求所有子数组的和的最大值。要求时间复杂度为O(n)。

    结对编程要求:两人结对完成编程任务。

           一人主要负责程序分析,代码编程。

           一人负责代码复审和代码测试计划。

                        发表一篇博客文章讲述两人合作中的过程、体会以及如何解决冲突(附结对开发的工作照)。

                        程序要使用的数组放在一个叫 input.txt 的文件中, 

                        文件格式是:数组的行数,数组的列数,每一行的元素,  (用逗号分开)

                 每一个数字都是有符号32位整数, 当然, 行数和列数都是正整数。

    一、设计思路

            由郭庆樑负责程序分析,代码编程,我负责代码复审和代码测试。

            程序解决思路是,先比较数组中单个元素的最大值,之后,再比较行相邻两个数相加的最大值,再比较列相邻两个数相加的最大值,即以第一行,第一列元素为中心,逐渐向整个矩阵扩展。最后,比较各个情况最大值,得出最终结果,同时,用数组记录各情况下最大值的初始坐标,最后获得最大值的坐标,根据情况输出组成元素。

    二、代码

    #include<stdio.h>

    int max[100]={0};//存储最大值

    int b[100]={1,1,1,1,1,1};//存储最大值的行坐标

    int c[100]={1,1,1,1,1,1};//存储最大值的列坐标

    int a[10][10];//存储文件中的数据

    int line;     //读取文件中的行

    int row;      //读取文件中的列

    void Compare()//进行比较

    {

       int i,j;

       int k=0;

       int Max;

       max[0]=a[0][0];

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

       {

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

          {

             if(max[0]<a[i][j])

             {

                max[0]=a[i][j];

                b[0]=i+1;

                c[0]=j+1;

             }

          }

       }

       max[1]=a[0][0]+a[0][1];

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

       {

          for(j=0;j+1<row;j++)

          {

             if(max[1]<(a[i][j]+a[i][j+1]))

             {

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

                b[1]=i+1;

                c[1]=j+1;

             }

          }

       }

       max[2]=a[0][0]+a[1][0];

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

       {

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

          {

             if(max[2]<(a[i][j]+a[i+1][j]))

             {

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

                b[2]=i+1;

                c[2]=j+1;

             }

          }

       }

       max[3]=a[0][0]+a[0][1]+a[0][2];

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

       {

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

          {

             if(max[3]<(a[i][j]+a[i][j+1]+a[i][j+2]))

             {

                max[3]=a[i][j]+a[i][j+1]+a[i][j+2];

                b[3]=i+1;

                c[3]=j+1;

             }

          }

       }

       max[4]=a[0][0]+a[0][1]+a[1][0]+a[1][1];

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

       {

          for(j=0;j+1<row;j++)

          {

             if(max[4]<(a[i][j]+a[i][j+1]+a[i+1][j]+a[i+1][j+1]))

             {

                   max[4]=a[i][j]+a[i][j+1]+a[i+1][j]+a[i+1][j+1];

                b[4]=i+1;

                c[4]=i+1;

             }  

          }

       }

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

       {

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

          {

             max[5]=max[5]+a[i][j];

          }

       }

       b[5]=1;

       c[5]=1;

       Max=max[0];

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

       {

          if(Max<max[i])

          {

             Max=max[i];

             k=i;

          }

       }

       printf("最大值为:%d ",Max);

       printf("最大值起始位置为%d行,%d列 ",b[k],c[k]);

       switch(k)

       {  

       case 0:printf("最大值由1个元素组成 ");break;

       case 1:printf("最大值由2个同行元素组成 ");break;

       case 2:printf("最大值由2个同列元素组成 ");break;

       case 3:printf("最大值由3个同行元素组成 ");break;

       case 4:printf("最大值由2行2列元素组成 ");break;

       case 5:printf("最大值由全体元素组成 ");break;

       default:break;

       }

    }

    int main()

    {

       int i,j;

       FILE *fp;

       fp=fopen("input.txt","r");

       if(fp==NULL)

       {

          printf("File open failed! ");

          return 0;

       }

       fscanf(fp,"%d",&line);

       fscanf(fp,"%d",&row);

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

       {

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

          {

             fscanf(fp,"%d",&a[i][j]);

          }

       }

       printf("数组元素为: ");

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

       {

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

          {

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

          }

          printf(" ");

       }

       fclose(fp);

       Compare();

       return 0;

    }

    三、截图

    四、总结

    经过上一回的合作,这次实验比较顺利,有了一定的默契。

    五、工作照

  • 相关阅读:
    颜色代码 #000~#FFF & DML案例设计
    SQLScript DML 创建 & 查询 & 序列(条件查询 日起查询 关联查询 子查询 分组查询 查询内容拼接 模糊查询)
    Java JDBC 连接数据库 Demo
    document的JavaScript一些用法
    dxSpreadSheet的报表demo-关于设计报表模板问题
    dxSpreadSheet的报表demo-关于设计报表模板的Datagroup问题
    TJSON的烦人的泄漏
    dxSpreadSheet的报表
    TDXSpreadSheet中自定义公式函数三大步骤
    SVN项目监视器的配置文件
  • 原文地址:https://www.cnblogs.com/lsfh/p/4357627.html
Copyright © 2011-2022 走看看