zoukankan      html  css  js  c++  java
  • 环形数组求最大子数组

    题目:
      返回一个环形数组中的最大子数组。
    要求:
      两人结对完成编程任务。
      一人主要负责程序分析,代码编程。
      一人负责代码复审和代码测试计划。
      
    思想:
      上一次的题目是返回一个整数数组中最大子数组的和;这次在上一次的基础上,我们原本想采用两个相同数组首位相连来实现环形的功能,采用原来的方法未能实现,后来采用课堂上张世通同学讲的方法,每次把数组首个元素移到末尾,重新比较,然后求最大
    程序源代码:
     1 #include<iostream>
     2 #include<ctime>
     3 using namespace std;
     4  void ARR(int [],int []);
     5  void MAX(int,int [] ,int [],int ,int,int);
     6   int main()
     7   {    
     8       srand((unsigned)time(NULL));  
     9      int * arr1=new int[5];
    10      int * arr2=new int[5];
    11      int * arr3=new int[5];
    12      int * arr4=new int[5];
    13      int * arr5=new int[5];
    14      int * result=new int[5];
    15      int sum=0,k=0,finally=0;
    16      int randoms=0,c1=0,c2=0;
    17      cout<<"随机产生10个数值:
    "<<endl;
    18      for ( int i=0; i<5; i++ ) {
    19          randoms = ( -rand()%100 + ( rand()%100 ) );
    20          arr1[i] = randoms;
    21          cout<<"数组元素"<<i+1<<"分别为:"<<arr1[i]<<endl;
    22      }
    23      MAX(0,result,arr1,sum,c2,c1);
    24      ARR(arr1,arr2);
    25      MAX(1,result,arr2,sum,c2,c1);
    26      ARR(arr2,arr3);
    27      MAX(2,result,arr3,sum,c2,c1);
    28      ARR(arr3,arr4);
    29      MAX(3,result,arr4,sum,c2,c1);
    30      ARR(arr4,arr5);
    31      MAX(4,result,arr5,sum,c2,c1);
    32      for ( int i=0; i<5; i++ ) {
    33         if(finally<result[i])
    34             {    
    35         finally=result[i];
    36             }
    37                 
    38      }
    39      cout<<"最大数组之和:"<<finally<<endl<<endl;            
    40      return 0;
    41  }
    42  void ARR(int arr1[],int arr2[])
    43  {
    44  for ( int i=0; i<4; i++ ) {
    45          
    46          arr2[i] = arr1[i+1];
    47          
    48      }
    49      arr2[4]=arr1[0];
    50  }
    51  void MAX(int i,int result[],int arr1[],int sum,int c2,int c1)
    52  {
    53  result[i]=arr1[0];
    54  sum=c1=c2=0;
    55  
    56      for ( int j=0; j<5; j++ ) {
    57          if ( sum>=0 ){ c2=j; sum+=arr1[j]; }
    58          else { c1=j; sum=arr1[j]; }
    59          if( result[i] < sum ) {
    60              
    61              result[i]=sum;
    62          }
    63      }
    64  } 

    运行截图

    结对编程总结:

      程序采用函数调用的方式,易于扩展。通过这次编程实践,我觉得交流可以

    扩充思路,互相指点,很有帮助。

  • 相关阅读:
    使用 git 及 github
    layUi数据表格自动渲染
    Linux下Tomcat重新启动 和查看日志
    禁止页面后退js(兼容各浏览器)
    通俗讲解计算机网络五层协议
    浏览器与服务器交互的过程
    转载 为什么会有前后端分离
    Kubernetes & Docker 容器网络终极之战(十四)
    Kubernetes 配置管理 Dashboard(十三)
    Kubernetes 配置管理 ConfigMap(十二)
  • 原文地址:https://www.cnblogs.com/huazongzong/p/4378843.html
Copyright © 2011-2022 走看看