• 程序开发之结对合作2


    一、题目

    1、返回一个二维数组中最大子数组的和。

    2、要求:

    输入一个整形数组,数组里有正数也有负数。

    数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。

    求所有子数组的和的最大值。要求时间复杂度为O(n)。

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

    数组的行数,数组的列数,每一行的元素,  (用逗号分开)每一个数字都是有符号32位整数, 当然, 行数和列数都是正整数

    将上述题目的各个结果转换成图形界面显示。

    3、结对开发要求: 

        两人结对完成编程任务。一人主要负责程序分析,代码编程。一人负责代码复审和代码测试计划。

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

    二、设计思路
    比较二维数组中单个元素的最大值;
    再比较行相邻两个数相加的最大值;
    再比较列相邻两个数相加的最大值;
    即以第一行,第一列元素为中心,逐渐向整个矩阵扩展。
    最后,比较各个情况最大值,得出最终结果。

    三、源代码

      1 #include<iostream.h>
      2 int max[6]={0};//存储最大值
      3 int b[6]={1,1,1,1,1,1};//存储最大值的行坐标
      4 int c[6]={1,1,1,1,1,1};//存储最大值的列坐标
      5 int a[10][10];//存储文件中的数据
      6 int line;     
      7 int row; 
      8 int main()
      9 {
     10     int i,j;
     11     int line=2;
     12     int row=3;
     13     void biggest();
     14     cout<<"请输入数组元素:(两行三列)"<<endl;
     15     for(i=0;i<line;i++)
     16     {
     17         for(j=0;j<row;j++)
     18         {
     19             cin>>a[i][j];
     20         }
     21     }
     22     cout<<"数组元素为:"<<endl;
     23     for(i=0;i<line;i++)
     24     {
     25         for(j=0;j<row;j++)
     26         {
     27             cout<<a[i][j]<<"	";
     28         }
     29         cout<<endl;
     30     }
     31     biggest();
     32     return 0;
     33 }     
     34 void biggest()//算出最大值
     35 {
     36     int i,j;
     37     int k=0;
     38     int Max;
     39     max[0]=a[0][0];
     40     for(i=1;i<line;i++)
     41     {
     42         for(j=0;j<row;j++)
     43         {
     44             if(max[0]<a[i][j])
     45             {
     46                 max[0]=a[i][j];
     47                 b[0]=i+1;
     48                 c[0]=j+1;
     49             }
     50         }
     51     }
     52     max[1]=a[0][0]+a[0][1];
     53     for(i=0;i<line;i++)
     54     {
     55         for(j=0;j+1<row;j++)
     56         {
     57             if(max[1]<(a[i][j]+a[i][j+1]))
     58             {
     59                 max[1]=a[i][j]+a[i][j+1];
     60                 b[1]=i+1;
     61                 c[1]=j+1;
     62             }
     63         }
     64     }
     65     max[2]=a[0][0]+a[1][0];
     66     for(j=0;j<row;j++)
     67     {
     68         for(i=0;i+1<line;i++)
     69         {
     70             if(max[2]<(a[i][j]+a[i+1][j]))
     71             {
     72                 max[2]=a[i][j]+a[i+1][j];
     73                 b[2]=i+1;
     74                 c[2]=j+1;
     75             }
     76         }
     77     }
     78     max[3]=a[0][0]+a[0][1]+a[0][2];
     79     for(i=0;i<line;i++)
     80     {
     81         for(j=0;j+2<row;j++)
     82         {
     83             if(max[3]<(a[i][j]+a[i][j+1]+a[i][j+2]))
     84             {
     85                 max[3]=a[i][j]+a[i][j+1]+a[i][j+2];
     86                 b[3]=i+1;
     87                 c[3]=j+1;
     88             }
     89         }
     90     }
     91     max[4]=a[0][0]+a[0][1]+a[1][0]+a[1][1];
     92     for(i=0;i+1<line;i++)
     93     {
     94         for(j=0;j+1<row;j++)
     95         {
     96             if(max[4]<(a[i][j]+a[i][j+1]+a[i+1][j]+a[i+1][j+1]))
     97             {
     98                 max[4]=a[i][j]+a[i][j+1]+a[i+1][j]+a[i+1][j+1];
     99                 b[4]=i+1;
    100                 c[4]=i+1;
    101             }
    102         }
    103     }
    104     max[5]=a[0][0]+a[0][1]+a[0][2]+a[1][0]+a[1][1]+a[1][2];
    105     b[5]=1;
    106     c[5]=1;
    107     Max=max[0];
    108     for(i=0;i<6;i++)
    109     {
    110         if(Max<max[i])
    111         {
    112             Max=max[i];
    113             k=i;
    114         }
    115     }
    116     cout<<"最大值为"<<Max<<endl;
    117     
    118 }

    四、运行结果

    五、心得体会

       

           我和同伴看到这道题目的时候,没有思路。后来听了别的同学关于这道题的想法后,才有了些许新想法。
    感觉这道题目跟以往的相比,有难度。我和小伙伴,在我们力所能及的范围内做这道题。通过这道题目,感
    觉自己在平时的练习中,有所欠缺,对于编程的能力还需要提高。在以后的练习中,应该多动手,争取可以
    不断简化自己程序中的算法。当然,在我和同伴一起的努力下,我们完成了题目,自己也得到了锻炼。

    (附图)

      

     

  • 相关阅读:
    《Java并发编程实战》(五)---- 任务执行
    《Java并发编程实践》(四)---- 构建阻塞
    《Java并发编程实践》(三)---- 组合对象
    《Java8实战》(三)---- 重构测试和调试
    《Java核心技术》---- 多线程
    《Java并发编程实战》(二)---- 对象的共享
    《Java 8 实战》(三)---- 流
    《Java 8 实战》(二)—— Lambda
    《Java 8 实战》(一)——通过行为参数化传递代码
    Android_问卷调查
  • 原文地址:https://www.cnblogs.com/yuji5656/p/4365450.html
Copyright © 2020-2023  润新知