• 最大子数组(3)


    一、题目及要求:

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

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

    二、设计思路:

          这个题目其实与上次毫无区别,仍然调用循环一维数组求最大子数组的函数,将二维数组列的情况全

    部列出,即转化为一维数组。a[0][0],a[0][0]a[0][1]........。在调用函数即可。

    二、源代码

      1 #include<iostream.h>
      2 int max2(int arry[],int length)  //跨越arry[n-1]、arry[0]的最大和
      3 {
      4     int total=0;
      5     int sum=arry[0];
      6     int minsum=arry[0];
      7     for(int i=1;i<length;i++)
      8     {
      9         if(sum>0)
     10         {
     11             sum=arry[i];
     12         }
     13         else
     14         {
     15             sum=sum+arry[i];
     16 
     17         }
     18         if(minsum>=sum)
     19         {
     20             minsum=sum;
     21         }
     22         total=total+arry[i];
     23     }
     24     total=total+arry[0];
     25     minsum=total-minsum;
     26 
     27     return minsum;
     28 }
     29 
     30 
     31 int max1(int arry[],int length)   //不跨越零点的最大和
     32 {
     33     int sum=arry[0];
     34     int maxsum=arry[0];
     35     for(int i=1;i<length;i++)    //求出相邻数组最小和
     36     {
     37         if(sum<0)
     38         {
     39             sum=arry[i];
     40         }
     41         else
     42         {
     43             sum=sum+arry[i];
     44 
     45         }
     46         if(maxsum<=sum)
     47         {
     48             maxsum=sum;
     49         }
     50     }
     51     //struct ret ret1={maxsum,start2,end};
     52     return maxsum;
     53 }
     54 int column(int a[][20],int length,int num1) //求最大和
     55   {
     56       int y=0;
     57       int d[20];
     58       int e[100];
     59       int c[100][20];
     60       c[0][0]=0;
     61       int p=0;
     62       int b[100]={0};
     63       for(int j=0;j<num1;j++)
     64       {
     65           for(int t=j;t<num1;t++)
     66           {
     67               for(int i=0;i<length;i++)
     68               {
     69                   b[i]=b[i]+a[t][i];
     70                   c[p][i]=b[i];
     71               }
     72               p=p+1;
     73           }
     74           for(int o=0;o<100;o++)
     75           {
     76               b[o]=0;
     77           }
     78       }
     79       for(int l=0;l<p;l++)
     80       {
     81 
     82           for(int u=0;u<length;u++)
     83           {
     84               d[u]=c[l][u];
     85               //cout<<d[u]<<"  ";
     86           }
     87           e[y++]=max1(d,length);
     88           e[y++]=max2(d,length);
     89           //cout<<e[y-1]<<"  ";
     90       }
     91       int Max=e[0];
     92       for(int i=0;i<y;i++)
     93       {
     94 
     95           if(e[i]>=Max)
     96          {
     97              Max=e[i];
     98             }
     99          }
    100       return Max;
    101 }
    102  int main()
    103 {
    104      int a[20][20];
    105      int length,index;
    106 
    107      cout<<"输入行数列数:";
    108      cin>>index>>length;
    109 
    110      int y=0;
    111      for(int i=0;i<index;i++)
    112      {
    113          for(int j=0;j<length;j++)
    114          {
    115              cin>>a[i][j];
    116          }
    117      }
    118 
    119      int s=column(a,length,index);
    120      cout<<"最大和为:"<<s<<endl;
    121      return 0;
    122  }

    四、截图

    五、感想

       对于这次实验仅简单的调用了上次函数,用时很少。不过这次我领航,没有书写任何代码,当看到伙伴再写代码

    时,似乎看到自己最容易犯的错,例如大括号,即等号与赋值号。当他写代码时,也比只看着更有感觉,交换一下

    位置原来可以看到的更多。也许,好像这是最后一次结对开发,在此,感想一直相互合作的队友,亦是兄弟。

    结对开发伙伴:李青 http://www.cnblogs.com/liqing1/

  • 相关阅读:
    iOS 9之后Url链接的NSUTF8StringEncoding转码实现
    iOS实现应用更新及强制更新
    Objective-C代码简写
    Mac下使用数据库将Excel数据转换存入.plist
    iOS开发之图片压缩实现
    iOS键盘事件实现、控制
    iOS 轻击、触摸和手势的检测
    使用CocoaPods时遇到 Permission denied 问题
    2016-3-1 Mac下使用Hexo搭建Blog
    2016-3-1 安装Hexo过程中遇到的问题
  • 原文地址:https://www.cnblogs.com/hujinhui/p/5359631.html
Copyright © 2020-2023  润新知