zoukankan      html  css  js  c++  java
  • 结对开发之二维数组

    一、思想过程

      结对人员:韩雪东,高扬

      本次题目是在原来一位数组的基础上加以扩展到二维数组,求二维子数组的最大和。刚开始难免思维比较混乱,但在与雪东在课上交流后还是有了一点思路。毕竟是扩展,我们认为当然离不开一位数组,就想办法利用上次编译的程序,通过比较一维数组的最大值进而得到二维数组的最大值。

    二、源代码

    // erweishuzuqiuzuida.cpp : Defines the entry point for the console application.
    //
    
    #include "stdafx.h"
    #include "fstream.h"
    #include "iostream.h"
    #include "stdio.h"
    
    #define MAXSIZE 50
    
    
    void read(int array[][MAXSIZE],int &len1,int &len2)//读取文件信息,并写入数组
    {
        ifstream infile("array.txt");
        if(!infile)
            cout<<"读取失败!"<<endl;
        else
        {
            infile>>len1>>len2;
            for(int i=0;i<len1;i++)
            {
                for(int j=0;j<len2;j++)
                {
                    infile>>array[i][j];
                }
            }
        }
    }
    void display(int array[][MAXSIZE],int len1,int len2,int size1,int size2)//显示数组信息
    {
        for(int i=len1;i<=size1;i++)
        {
            for(int j=len2;j<=size2;j++)
            {
                cout<<array[i][j]<<"	";
            }
            cout<<endl;
        }
    }
    int * shuchu(int m[],int szcdx,int xhy)//m[]表示要测试的数组,szchx表示数组长度,xhy表示循环条件
    {
        int t,p;
        int max,sum;
        //缓存数组赋值
        int c[10000];
        int v[10000];
        int o=2*szcdx;
        int * temp= new int[o];
    
        for(t=szcdx-xhy-1;t<szcdx;t++)
        {
            c[t-szcdx+xhy+1]=m[t];
        }
        //循环
        for(t=xhy;t>=0;t--)
        {
            sum=0;
            for(p=0;p<=t;p++)
            {
                sum=sum+c[p];
            }
            v[t]=sum;
        }
        //循环输出最大值
        max=v[0];
        for(t=0;t<xhy+1;t++)
        {
            if(max<=v[t])
            {
                max=v[t];
            }
            //printf("%d  ",v[t]);
            temp[t]=v[t];
        }
        return temp;
    }
    int maxs(int s[],int length)//输出最大值
    {
        int d=s[0];
        for(int f=0;f<length;f++)
        {
            if(d<=s[f])
            {
                d=s[f];
            }
        }
        return d;    
    }
    int main(int argc, char* argv[])
    {
        int len1,len2;                       //len1是行数,len2是列数
        int x[3];
        int y[3];
        int *k;
        int *l;
        int array[MAXSIZE][MAXSIZE];
        read(array,len1,len2);
        cout<<"矩阵:"<<endl;
        display(array,0,0,len1-1,len2-1);
    
    
    
        for(int i=0;i<3;i++)
        {
            x[i]=array[0][i];
    
        }
        int e=3;
        int w[6];
        int u[6];
        int q=0;
        printf("数组第一行子数组的和:");
        for(i=2;i>=0;i--)
        {
            
            k=shuchu(x,3,i);
            for(int r=0;r<e;r++)
            {
                
                w[q]=k[r];
                printf("%d  ",w[q]);
                q++;
            }
            e--;    
        }
        for(int j=0;j<3;j++)
        {
            y[j]=array[1][j];
        }
        printf("
    ");
        e=3;
        q=0;
        printf("数组第二行子数组的和:");
        for(i=2;i>=0;i--)
        {
            
            l=shuchu(y,3,i);
            for(int r=0;r<e;r++)
            {
                
                u[q]=l[r];
                printf("%d  ",u[q]);
                q++;
            }
            e--;    
        }
    
    
        printf("
    ");
        int h[6];
        printf("数组包含两行的子数组的和:");
        for(int m=0;m<6;m++)
        {
            h[m]=w[m]+u[m];
            printf("%d  ",h[m]);
        }
        
    
        int k1=maxs(w,6);
        int k2=maxs(u,6);
        int k3=maxs(h,6);
    
        int maxx=k1;
        if(maxx<=k2)
        {
            maxx=k2;
        }
        if(maxx<=k3)
        {
            maxx=k3;
        }
        printf("
    最大和%d
    ",maxx);
        return 0;
    }

    三、测试结果

    四、心得体会

      题目明显比上一次要复杂一点,在讨论的过程中遇到我们两个都不懂的问题,难免会感觉尴尬。在一个问题很长时间内得不到解决的时候,难免心里会浮躁,在这个时候如果是一个人的话,我也许会选择放弃,但当两个人在编程的时候,放弃是很难说出口的,所以虽然花了不少时间,我们还是把想要的结果表现了出来,即使我们的方法不是很完善,但我们很大程度上利用了第一次结对的成果,这不正像在《梦断代码》中看到的“好程序员懂得写什么,而卓越的程序员知道改写(并复用)什么。”,虽然我们复用的不大好,但我们尝试了。

    附图:

  • 相关阅读:
    虚拟化基础介绍
    Linux---1.06.用户和用户组管理
    1.vmware tools的安装
    5.无法更新包,yum源更换无效
    Linux---1.05.软件包管理
    4.Vim的安装及待解决问题
    NSWorkspace的mountedLocalVolumePaths
    修改系统默认的NSButton的按下变灰
    NSParagraphStyleAttributeName
    - (BOOL)applicationShouldTerminateAfterLastWindowClosed:(NSApplication *)sender
  • 原文地址:https://www.cnblogs.com/gaoyang110/p/4364171.html
Copyright © 2011-2022 走看看