• 体验结对开发的乐趣(5)--(首尾相连的二维数组求最大子数组和的问题)


    结对伙伴:信1201-2班高扬、信1201-1班韩雪东

    一、题目要求与设计思想

    题目要求:在上一次的基础上把数组变为二维数组,然后首尾相接,形成连环,然后求和最大的子数组;

    设计思想:一维数组首尾相连的问题已经得到解决,二位数组求和最大的子数组的问题也已经解决了,就是把这两个程序思想融在一起,然后在短短的时间内就完成了这次课堂项目。

    二、源代码

      1 // erweishuzuqiuzuida.cpp : Defines the entry point for the console application.
      2 // 高扬 韩雪东
      3 
      4 //#include "stdafx.h"
      5 #include "fstream.h"
      6 #include "iostream.h"
      7 #include "stdio.h"
      8 
      9 #define MAXSIZE 50
     10 
     11 
     12 void read(int array[][MAXSIZE],int &len1,int &len2)//读取文件信息,并写入数组
     13 {
     14     ifstream infile("array.txt");
     15     if(!infile)
     16         cout<<"读取失败!"<<endl;
     17     else
     18     {
     19         infile>>len1>>len2;
     20         for(int i=0;i<len1;i++)
     21         {
     22             for(int j=0;j<len2;j++)
     23             {
     24                 infile>>array[i][j];
     25             }
     26         }
     27     }
     28 }
     29 void display(int array[][MAXSIZE],int len1,int len2,int size1,int size2)//显示数组信息
     30 {
     31     for(int i=len1;i<=size1;i++)
     32     {
     33         for(int j=len2;j<=size2;j++)
     34         {
     35             cout<<array[i][j]<<"	";
     36         }
     37         cout<<endl;
     38     }
     39 }
     40 int * shuchu(int m[],int szcdx,int xhy)//m[]表示要测试的数组,szchx表示数组长度,xhy表示循环条件
     41 {
     42     int t,p;
     43     int max,sum;
     44     //缓存数组赋值
     45     int c[10000];
     46     int v[10000];
     47     int o=2*szcdx;
     48     int * temp= new int[o];
     49     
     50     for(t=szcdx-xhy-1;t<szcdx;t++)
     51     {
     52         c[t-szcdx+xhy+1]=m[t];
     53     }
     54     //循环
     55     for(t=xhy;t>=0;t--)
     56     {
     57         sum=0;
     58         for(p=0;p<=t;p++)
     59         {
     60             sum=sum+c[p];
     61         }
     62         v[t]=sum;
     63     }
     64     //循环输出最大值
     65     max=v[0];
     66     for(t=0;t<xhy+1;t++)
     67     {
     68         if(max<=v[t])
     69         {
     70             max=v[t];
     71         }
     72         //printf("%d  ",v[t]);
     73         temp[t]=v[t];
     74     }
     75     return temp;
     76 }
     77 int maxs(int s[],int length)//输出最大值
     78 {
     79     int d=s[0];
     80     for(int f=0;f<length;f++)
     81     {
     82         if(d<=s[f])
     83         {
     84             d=s[f];
     85         }
     86     }
     87     return d;    
     88 }
     89 int main(int argc, char* argv[])
     90 {
     91     int len1,len2;                       //len1是行数,len2是列数
     92     
     93     int x[3];
     94     int y[3];
     95     int *k;
     96     int *l;
     97     int array[MAXSIZE][MAXSIZE];
     98     read(array,len1,len2);
     99     cout<<"矩阵:"<<endl;
    100     display(array,0,0,len1-1,len2-1);
    101     
    102     
    103     
    104     for(int i=0;i<3;i++)
    105     {
    106         x[i]=array[0][i];
    107         
    108     }
    109     int e=3;
    110     int w[6];
    111     int u[6];
    112     int q=0;
    113     printf("数组第一行子数组的和:");
    114     for(i=2;i>=0;i--)
    115     {
    116         
    117         k=shuchu(x,3,i);
    118         for(int r=0;r<e;r++)
    119         {
    120             
    121             w[q]=k[r];
    122             printf("%d  ",w[q]);
    123             q++;
    124         }
    125         e--;    
    126     }
    127     for(int j=0;j<3;j++)
    128     {
    129         y[j]=array[1][j];
    130     }
    131     printf("
    ");
    132     e=3;
    133     q=0;
    134     printf("数组第二行子数组的和:");
    135     for(i=2;i>=0;i--)
    136     {
    137         
    138         l=shuchu(y,3,i);
    139         for(int r=0;r<e;r++)
    140         {
    141             
    142             u[q]=l[r];
    143             printf("%d  ",u[q]);
    144             q++;
    145         }
    146         e--;    
    147     }
    148     
    149     
    150     printf("
    ");
    151     int h[6];
    152     printf("数组包含两行的子数组的和:");
    153     for(int m=0;m<6;m++)
    154     {
    155         h[m]=w[m]+u[m];
    156         printf("%d  ",h[m]);
    157     }
    158     
    159     
    160     int k1=maxs(w,6);
    161     int k2=maxs(u,6);
    162     int k3=maxs(h,6);
    163     
    164     int maxx=k1;
    165     if(maxx<=k2)
    166     {
    167         maxx=k2;
    168     }
    169     if(maxx<=k3)
    170     {
    171         maxx=k3;
    172     }
    173     printf("
    最大和%d
    ",maxx);
    174     
    175     
    176     
    177     
    178     int r1;
    179     int p1;
    180     for(int t=0;t<2;t++)
    181     {
    182         p1=array[0][0];
    183         r1=array[1][0];
    184         for(q=0;q<2;q++)
    185         {
    186             
    187             array[0][q]=array[0][q+1];
    188             array[1][q]=array[1][q+1];
    189             
    190         }
    191         array[0][2]=p1;
    192         array[1][2]=r1;
    193         for(int i=0;i<3;i++)
    194         {
    195             x[i]=array[0][i];
    196             
    197         }
    198         int e=3;
    199         int w[6];
    200         int u[6];
    201         int q=0;
    202         printf("数组第一行子数组的和:");
    203         for(i=2;i>=0;i--)
    204         {
    205             
    206             k=shuchu(x,3,i);
    207             for(int r=0;r<e;r++)
    208             {
    209                 
    210                 w[q]=k[r];
    211                 printf("%d  ",w[q]);
    212                 q++;
    213             }
    214             e--;    
    215         }
    216         for(int j=0;j<3;j++)
    217         {
    218             y[j]=array[1][j];
    219         }
    220         printf("
    ");
    221         e=3;
    222         q=0;
    223         printf("数组第二行子数组的和:");
    224         for(i=2;i>=0;i--)
    225         {
    226             
    227             l=shuchu(y,3,i);
    228             for(int r=0;r<e;r++)
    229             {
    230                 
    231                 u[q]=l[r];
    232                 printf("%d  ",u[q]);
    233                 q++;
    234             }
    235             e--;    
    236         }
    237         
    238         
    239         printf("
    ");
    240         int h[6];
    241         printf("数组包含两行的子数组的和:");
    242         for(int m=0;m<6;m++)
    243         {
    244             h[m]=w[m]+u[m];
    245             printf("%d  ",h[m]);
    246         }
    247         
    248         
    249         int k1=maxs(w,6);
    250         int k2=maxs(u,6);
    251         int k3=maxs(h,6);
    252         
    253         int maxx=k1;
    254         if(maxx<=k2)
    255         {
    256             maxx=k2;
    257         }
    258         if(maxx<=k3)
    259         {
    260             maxx=k3;
    261         }
    262         printf("
    最大和%d
    ",maxx);
    263     }
    264 
    265         return 0;
    266 
    267     
    268 }

    三、运行结果截图

    四、心得体会

    在读《梦断代码》之后,这本书上有一句话是这样写的:“当你把系统的一块新部件放进去,总要看看之后的5年获10年自己会不会后悔--你是否能拓展它、替代它”,随着问题的深入,我深刻的体会到了基础的重要性,体会到了代码的可扩展性给以后的修改带来多大的方便。还有就是1+1>2的问题,结对开发把两个人的想法汇到一起,不论是在编程效率上还是思路设计上都会比一个人的快,希望在团队开发的时候还会有这样的体会。

    五、有图有真相

  • 相关阅读:
    WPF FAQ (from Syncfusion)
    父窗口与子窗口的层次关系
    [WPF疑难]如何禁用WPF窗口的系统菜单(SystemMenu)
    【讨论】不得不重视的问题:信息太多!信息太杂!
    javaScript系列 [08]javaScript和JSON (进阶)
    javaScript系列 [11]Canvas绘图(路径)
    javaScript系列 [10]Canvas绘图(基础)
    Hexo + Github搭建个人博客
    javaScript系列 [07]日期类型和计时器
    javaScript系列 [09]javaScript和JSON (拓展)
  • 原文地址:https://www.cnblogs.com/hanshidiguo/p/4384602.html
Copyright © 2020-2023  润新知