zoukankan      html  css  js  c++  java
  • 结队开发5----首尾相连数组

    结队成员:范德一,赵永恒

    一.题目

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

    要求:

    输入一个整形数组,数组里有正数也有负数。

    数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。

    如果数组A[0]……A[j-1]首尾相邻,允许A[i-1], …… A[n-1], A[0]……A[j-1]之和最大。

    同时返回最大子数组的位置。

    求所有子数组的和的最大值。要求时间复杂度为O(n)

    二.设计思路

    我们在上次实验的基础上,通过在原有的循环体的最外边再添加了一个循环条件,这个循环条件是在第一次循环之后,将数组中每个数的值赋给它前面一个数,这样在最后一次循环的时候就实现了首尾相连。

    三.实验代码

      1 #include<iostream.h>
      2 
      3 #include<time.h>
      4 
      5 #include<stdlib.h>
      6 
      7  
      8 
      9 int main()
     10 
     11 {
     12 
     13     int a[10];
     14 
     15     int m;              //m是每组个数
     16 
     17     int *sum=new int[10];
     18 
     19         srand((unsigned)time(NULL));
     20 
     21     cout<<"*********************************"<<endl;
     22 
     23     for(int i=0;i<10;i++)
     24 
     25     {  
     26 
     27         int b;
     28 
     29         b=rand()%2;
     30 
     31         switch (b)
     32 
     33         {
     34 
     35             case 0:
     36 
     37                     a[i]=rand()%100;
     38 
     39                     break;
     40 
     41             case 1:
     42 
     43                     a[i]=-rand()%100;
     44 
     45                     break;
     46 
     47         }
     48 
     49         cout<<a[i]<<"   ";
     50 
     51        /* if((i%10)==4)
     52 
     53         cout<<endl;   */      //每行10个输出,换行
     54 
     55      
     56 
     57     }
     58 
     59      
     60 
     61     cout<<"*********************************"<<endl;
     62 
     63     int he=0;
     64 
     65 for(int t=1;t<11;t++)
     66 
     67 {
     68 
     69     for(m=1;m<11;m++)
     70 
     71     {
     72 
     73         int temp=0;
     74 
     75         for(int n=0;n<m;n++) 
     76 
     77         {
     78 
     79             temp=temp+a[n];
     80 
     81         }
     82 
     83         for(int k=0;k<=(10-m);k++)
     84 
     85         {
     86 
     87             sum[k]=0;
     88 
     89             for(int j=k;j<(k+m);j++)  //a[k]是每组第一个数
     90 
     91             {
     92 
     93                 sum[k]=sum[k]+a[j];
     94 
     95             }
     96 
     97             if(sum[k]>temp)
     98 
     99             {
    100 
    101                 temp=sum[k];    
    102 
    103             }   
    104 
    105         }
    106 
    107         if(temp>he)
    108 
    109         {
    110 
    111             he=temp;
    112 
    113         }
    114 
    115  
    116 
    117     }
    118 
    119     int temp1=0;
    120 
    121     temp1=a[0];
    122 
    123     a[0]=a[1];
    124 
    125     a[1]=a[2];
    126 
    127     a[2]=a[3];
    128 
    129     a[3]=a[4];
    130 
    131     a[4]=a[5];
    132 
    133     a[5]=a[6];
    134 
    135     a[6]=a[7];
    136 
    137     a[7]=a[8];
    138 
    139     a[8]=a[9];
    140 
    141     a[9]=temp1;
    142 
    143 }
    144 
    145     cout<<"最大子数组的和为: "<<he<<endl;
    146 
    147     cout<<"*********************************"<<endl;
    148 
    149     return 0;
    150 
    151 }

    四.运行截图

    五.实验感想

    这是我们俩一起改进的第五个程序,结对开发确实觉得自己在两个人的合作中成长了不少,赵永恒对于代码的书写有自己的规范,我觉得能够很好的影响到我,在定义一个变量的时候他能将其意思很明确的表示出来,还有他喜欢用函数的思想来解决问题,在主函数外增加函数实现调用的功能,而我比较喜欢在主函数中直接加入条件控制,我觉得他的思想很值得我去学习,我的套路在一个比较大一点的程序中可能就显得很难实现。

    六、合照

  • 相关阅读:
    Qt中实现单例模式(SingleTon)
    毕设开发手记(二)
    Qt中由表中单元格的QModelIndex获取Global Pos的正确方法
    Qt的槽可以使用默认参数
    C#结构的了解
    dos命令集江南技术联盟
    C#中的abstract与virtual的用法
    [转]六种删除数据库重复行的方法
    PL/SQL的TO_CHAR()与TO_DATE()
    索引索引索引(转)
  • 原文地址:https://www.cnblogs.com/fan123/p/4379315.html
Copyright © 2011-2022 走看看