• 软件工程课堂练习--结对开发


    一、题目要求

    题目:返回一个二维整数数组中最大子数组的和。
    要求:
    输入一个二维整形数组,数组里有正数也有负数。
    二维数组首尾相接,象个一条首尾相接带子一样。
    数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。
    求所有子数组的和的最大值。要求时间复杂度为O(n)。
    二、设计思路
    这次的题目设计思路沿用的是上次一位数组的设计思想,把二维数组中的每一行看作是一位数组,然后做出扩展,程序依然用的是二维数组的那个,在这个基础上做出稍稍改变就行了
    三、源代码
      1 //程序开发者:曹美娜 盖相庚
      2 //   开发时间:2015/3/31
      3 
      4 #include "stdafx.h"
      5 #include "fstream.h"
      6 #include "iostream.h"
      7 #include "stdio.h"
      8 #define N 50
      9 #define M 50
     10 
     11 void readarry(int arry[][N],int &line,int &row)            //读取txt文件中的二维数组
     12 {
     13     ifstream infile("a.txt");
     14     if(!infile)
     15         cout<<"读取失败!"<<endl;
     16     else
     17     {
     18         infile>>line>>row;
     19         for(int i=0;i<line;i++)
     20         {
     21             for(int j=0;j<row;j++)
     22             {
     23                 infile>>arry[i][j];
     24             }
     25         }
     26     }
     27 }
     28 
     29 int maxarry(int arry[][N],int line,int row)       //找到二维数组中子矩阵中元素和的最大值
     30 {
     31     int max[N];
     32     printf("以上数组经变形后:
    ");
     33     for(int l=0;l<line;l++)                
     34     {
     35         int max1=-1000;
     36          for(int j=0;j<(row+1)/2;j++)
     37         {
     38             int sum=0;        
     39             for(int i=j;i<(row+1)/2;i++)
     40            {
     41                 sum=sum+arry[l][i];
     42                 if(sum>=max1)
     43                 {
     44                     max1=sum;
     45                 }
     46            }
     47                         
     48          }
     49              max[l]=max1;
     50              
     51             printf("第%d集合所有子数组的和的最大值为:%d
    ",l+1,max1);
     52     }
     53     int fmax=max[0];
     54     for(int q=0;q<line;q++)
     55     {
     56         if(max[q]>fmax)
     57           fmax=max[q];
     58     }
     59      printf("所以次二位数字中子数组中各元素的和的最大值为:%d
    ",fmax);
     60         
     61         return 0;
     62 }
     63 
     64 void reacharry(int arry[][N],int line,int row)      //组成一个新数组
     65 {
     66     int sumarry[M][N];
     67     int sumline,sumrow;
     68     int z;
     69     for(int r=0;r<row;r++)
     70     {
     71         z=0;
     72         for(int i=0;i<line;i++)
     73         {
     74             for(int q=line;q>0;q--)
     75             {
     76                 int sum=0;
     77                 for(int j=i;j<=line-q+i;j++)
     78                 {
     79                     sum=sum+arry[j][r];
     80                 }            
     81                 sumarry[z][r]=sum;
     82                 z++;            
     83             }
     84         }
     85     }
     86     sumline=z-1;
     87     sumrow=r;    
     88     maxarry(sumarry,sumline,sumrow);      //将得到的新数组交给maxsrry(),找到最后结果
     89 
     90 }
     91 
     92 int expand(int arry[][N],int &line,int &row)     //对二维数组进行拓展
     93 {
     94     int arry1[N][N];
     95     for(int i=0;i<line;i++)
     96     {
     97         for(int j=0;j<row;j++)
     98         {
     99             arry1[i][j]=arry[i][j];
    100         }
    101     }
    102     int num=0;
    103     for(i=0;i<line;i++)
    104     {
    105         for(int q=row;q<2*row-1;q++)
    106         {
    107             arry[i][q]=arry[i][num];
    108             num++;
    109         }
    110     }
    111     reacharry(arry1,line,2*row-1);
    112 
    113     return 0;
    114 
    115 }
    116 
    117 
    118 
    119 void show(int arry[][N],int line,int row)      //显示数组
    120 {
    121     printf("从“a.txt”文件中读取的数组为:
    ");
    122     for(int i=0;i<line;i++)
    123     {
    124         for(int j=0;j<row;j++)
    125         {
    126             printf("	%d	",arry[i][j]);
    127         }
    128         printf("
    ");
    129     }
    130 }
    131 
    132 
    133 
    134 
    135 int main(int argc, char* argv[])
    136 {
    137     int arry[M][N];
    138     int line,row;                 //行,列
    139     readarry(arry,line,row);
    140     show(arry,line,row);
    141     expand(arry,line,row);
    142     
    143    return 0;
    144 }

    四、截图

    可能由于我没有讲拓展后的数组输出,所以读者可能看不太出来设计思路,其实设计思路在我上几篇博客中都有提到,这几个的程序设计思路都有所相同

    五、心得体会

    本次结对开发用时最短,因为是在上一次二维数组上做的拓展,所以思路捋起来很清晰,所以完成的也就快了,这次放假前老师说要要我们小小的放松一下,所以会有一下段时间不会在和我的小伙伴结对编程了,总结一下这几次的结对开发的想法吧,我的小伙伴还是很给力的,只不过是比较自谦,不太信任自己的能力,有时候想东西他也是要比我快的,思维要比我更活跃,希望盖盖同学好好努力,不要太早的为自己盖上标签。

    结对开发就是要2个人把自己的想法、热情都交给对方,一开始老师叫我们这样练习的目的大家都认为太形式化,可是几次下来我想大家或多或少都会有自己的收获,都能从对方身上学到些东西,我想大家也会在这段时间里慢慢成长起来。

  • 相关阅读:
    博客中添加音乐播放器插件
    博客添加鼠标点击特效
    用好fastboot命令,刷机加锁不用再找工具!
    使用移动终端管理(MDM)轻松进行远程故障排除
    在IT资产生命周期中节省成本的方法:Part 3 维护和支持
    如何做好进程监控?
    OpManager引领智能运维未来的发展方向
    终端安全解决方案如何帮助保护数字化工作空间中的设备
    如何抵御MFA验证攻击
    为什么需要对网络环境进行IP扫描?
  • 原文地址:https://www.cnblogs.com/caomeina/p/4381898.html
Copyright © 2020-2023  润新知