zoukankan      html  css  js  c++  java
  • 二位数组

    一、题目及要求:

          返回一个整数数组中最大子数组的和

          输入一个二维整形数组,数组里有正数也有负数;二维数组首尾相接,像一条首尾相接的带子一样。

    二、设计思路:

          调用循环一维数组求最大子数组的函数,将二维数组列的情况全部列出,即转化为一维数组。

    三、源代码

    #include<iostream.h>
    int max2(int arry[],int length)  //跨越arry[n-1]、arry[0]的最大和
    {
        int total=0;
        int sum=arry[0];
        int minsum=arry[0];
        for(int i=1;i<length;i++)
        {
            if(sum>0)
            {
                sum=arry[i];
            }
            else
            {
                sum=sum+arry[i];
    
            }
            if(minsum>=sum)
            {
                minsum=sum;
            }
            total=total+arry[i];
        }
        total=total+arry[0];
        minsum=total-minsum;
    
        return minsum;
    }
    
    
    int max1(int arry[],int length)   //不跨越零点的最大和
    {
        int sum=arry[0];
        int maxsum=arry[0];
        for(int i=1;i<length;i++)    //求出相邻数组最小和
        {
            if(sum<0)
            {
                sum=arry[i];
            }
            else
            {
                sum=sum+arry[i];
    
            }
            if(maxsum<=sum)
            {
                maxsum=sum;
            }
        }
        //struct ret ret1={maxsum,start2,end};
        return maxsum;
    }
    int column(int a[][20],int length,int num1) //求最大和
      {
          int y=0;
          int d[20];
          int e[100];
          int c[100][20];
          c[0][0]=0;
          int p=0;
          int b[100]={0};
          for(int j=0;j<num1;j++)
          {
              for(int t=j;t<num1;t++)
              {
                  for(int i=0;i<length;i++)
                  {
                      b[i]=b[i]+a[t][i];
                      c[p][i]=b[i];
                  }
                  p=p+1;
              }
              for(int o=0;o<100;o++)
              {
                  b[o]=0;
              }
          }
          for(int l=0;l<p;l++)
          {
    
              for(int u=0;u<length;u++)
              {
                  d[u]=c[l][u];
                  //cout<<d[u]<<"  ";
              }
              e[y++]=max1(d,length);
              e[y++]=max2(d,length);
              //cout<<e[y-1]<<"  ";
          }
          int Max=e[0];
          for(int i=0;i<y;i++)
          {
    
              if(e[i]>=Max)
             {
                 Max=e[i];
                }
             }
          return Max;
    }
     int main()
    {
         int a[20][20];
         int length,index;
    
         cout<<"输入行数列数:";
         cin>>index>>length;
    
         int y=0;
         for(int i=0;i<index;i++)
         {
             for(int j=0;j<length;j++)
             {
                 cin>>a[i][j];
             }
         }
    
         int s=column(a,length,index);
         cout<<"最大和为:"<<s<<endl;
         return 0;
     }

    四、截图

    五、实验总结

       这次二维数组实验调用了上次实验的函数,致辞交换角色实验代码主要由我书写,由于角色交换,更加锻炼了自己,同时也发现了自己眼高手低的毛病,找到了自己的很多错误,感觉老师说的很对,确实应该交换下角色,全面提高自己。不过自己已经和队友合作的挺默契了,不管换不换角色都能顺利完成任务。

  • 相关阅读:
    Linux磁盘空间释放问题
    Linux终端复用神器-Tmux使用梳理
    Linux下路由配置梳理
    Gitlab利用Webhook实现Push代码后的jenkins自动构建
    Tomcat 内存溢出 "OutOfMemoryError" 问题总结 (JVM参数说明)
    Centos下SVN环境部署记录
    Docker格式化输出命令:"docker inspect --format" 学习笔记
    ngx_pagespeed-nginx前端优化模块介绍
    git pull 总要求输入账号和密码解决?
    Android Studio之BuildConfig类
  • 原文地址:https://www.cnblogs.com/yanyafeng/p/4391158.html
Copyright © 2011-2022 走看看