zoukankan      html  css  js  c++  java
  • 体验结对开发的乐趣(2)--(二位数组求和最大的子数组)

    一、队员:

    信1201-2班高扬、信1201-1班韩雪东

    二、题目要求

    这次比上一次增加了一些难度,改为二维数组求和最大的子数组。

    三、设计思想

    上一次实现的一位数组的,然后就想把二维数组转化为一维数组来做,首先解决第一行的最大子数组问题,方法就和上次一样了,然后第二行,然后第一行和第二行的相加求出两行的,然后分别存放在三个一维数组里,然后对这三个数组里求最大的值。

    四、源代码

      1 // erweishuzuqiuzuida.cpp : Defines the entry point for the console application.
      2 //信1201-2班高扬、信1201-1班韩雪东
      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;
     92     int x[3];
     93     int y[3];
     94     int *k;
     95     int *l;
     96     int array[MAXSIZE][MAXSIZE];
     97     read(array,len1,len2);
     98     cout<<"矩阵:"<<endl;
     99     display(array,0,0,len1-1,len2-1);
    100 
    101 
    102 
    103     for(int i=0;i<3;i++)
    104     {
    105         x[i]=array[0][i];
    106 
    107     }
    108     int e=3;
    109     int w[6];
    110     int u[6];
    111     int q=0;
    112     printf("数组第一行子数组的和:");
    113     for(i=2;i>=0;i--)
    114     {
    115         
    116         k=shuchu(x,3,i);
    117         for(int r=0;r<e;r++)
    118         {
    119             
    120             w[q]=k[r];
    121             printf("%d  ",w[q]);
    122             q++;
    123         }
    124         e--;    
    125     }
    126     for(int j=0;j<3;j++)
    127     {
    128         y[j]=array[1][j];
    129     }
    130     printf("
    ");
    131     e=3;
    132     q=0;
    133     printf("数组第二行子数组的和:");
    134     for(i=2;i>=0;i--)
    135     {
    136         
    137         l=shuchu(y,3,i);
    138         for(int r=0;r<e;r++)
    139         {
    140             
    141             u[q]=l[r];
    142             printf("%d  ",u[q]);
    143             q++;
    144         }
    145         e--;    
    146     }
    147 
    148 
    149     printf("
    ");
    150     int h[6];
    151     printf("数组包含两行的子数组的和:");
    152     for(int m=0;m<6;m++)
    153     {
    154         h[m]=w[m]+u[m];
    155         printf("%d  ",h[m]);
    156     }
    157     
    158 
    159     int k1=maxs(w,6);
    160     int k2=maxs(u,6);
    161     int k3=maxs(h,6);
    162 
    163     int maxx=k1;
    164     if(maxx<=k2)
    165     {
    166         maxx=k2;
    167     }
    168     if(maxx<=k3)
    169     {
    170         maxx=k3;
    171     }
    172     printf("
    最大和%d
    ",maxx);
    173     return 0;
    174 }

    五、运算结果截图

    五、心得体会

    这一次实验比上一次增加了一点难度,上一次的逻辑思想就够混乱的了,这一次在调用上一次的函数的时候就出了逻辑的问题,然后在读文件的时候还出了问题。这次大部分的功劳都是队友出的,尤其在逻辑推理上,尤其的比我想的多,感谢有这么一个好队友,感谢高扬。

    六、结对开发照

  • 相关阅读:
    JDBI
    Concise: Compressed ’n’ Composable Integer Set
    java 7 新特性
    BIO的简单Demo
    手写一个死锁Demo
    实现一个Cglib代理Demo
    实现一个JDK代理demo
    ClassNotFoundException和 NoClassDefFoundError区别验证
    集合—ArrayList
    Hadoop之Storm基础
  • 原文地址:https://www.cnblogs.com/hanshidiguo/p/4364174.html
Copyright © 2011-2022 走看看