• 结对开发--求环数组的最大字数组


    一、题目要求

      题目:返回一个整数数组中最大子数组的和。
      要求:
      输入一个整形数组,数组里有正数也有负数。
      数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。
      如 果数组A[0]……A[j-1]首尾相邻,允许A[i-1], …… A[n-1], A[0]……A[j-1]之和最大。
      同时返回最大子数组的位置。
      求所有子数组的和的最大值。要求时间复杂度为O(n)。

    二、设计思路

    这次的主要问题在于这次的一位数组要首尾相连,允许A[i-1], …… A[n-1], A[0]……A[j-1]之和最大,所以我们采用以下方法寻找最大值,如输入 a1 a2 a3 a4这4位数,我们将其扩展为

                a1 a2 a3 a4 a1 a2 a3

    在第一个的基础上进行扩展,很容易得到结果,并返回最大数组

    三、源代码

     1 #include "stdio.h"
     2 #include"stdlib.h"
     3 #include"time.h"
     4 #define N 1000 
     5 int a=0,b=0;
     6 int compare( int arry1[],int length)
     7 {
     8     int max[N],max1,i,j;
     9     int fmax=max[0];
    10     for(j=0;j<length;j++)
    11     {
    12         int sum=0;
    13         
    14         max1=-9876;
    15         for(i=j;i<j+length;i++)
    16         {
    17             sum=sum+arry1[i];
    18             if(sum>=max1)
    19                 max1=sum;
    20         }
    21         max[j]=max1;
    22         printf("包含数组中第%d个数的所有子数组中和最大的值为:%d
    ",j+1,max[j]);
    23         if(max[j]>fmax)
    24         {
    25             fmax=max[j];
    26             a=j;
    27             b=i;
    28         }
    29     }
    30     printf("所有子数组的和的最大值为:%d
    ",fmax);
    31     for(i=a;i<b;i++)
    32     {
    33         printf("%d ",arry1[i]);
    34     }
    35     printf("
    ");
    36     return 0;
    37 }
    38 int main(int argc, char* argv[])
    39 {
    40     int arry[N],arry1[N];
    41     int length;
    42     srand(time(NULL));
    43     printf("请输入要比较整数的个数:");
    44     scanf("%d",&length);
    45     printf("请输入整数");
    46     for(int i=0;i<length;i++)
    47     {
    48         scanf("%d",&arry[i]);
    49     
    50     }
    51     for( i=0;i<2*length-1;i++)
    52     {
    53         if(i<length)
    54         {
    55             arry1[i]=arry[i];
    56         }
    57         else
    58         {
    59             arry1[i]=arry[i-length];
    60         }
    61         printf("%d ",arry1[i]);
    62     }
    63     printf("
    ");
    64     compare(arry1,length);
    65     return 0;
    66 }

    运行结果:

    四、心得体会

          通过这几次的结对合作,我体会到了团结的重要性,我想这也是老师的目的吧,在这之前老师总是让同学们把自己的想法说出来,他们的想法都特别的,我想着也是我的不足之处吧,我希望以后有更多的机会去互相学习,互相进步。

         

  • 相关阅读:
    php接收二进制文件转换成图片
    浅述WinForm多线程编程与Control.Invoke的应用
    精典策略模式
    js数组的操作详解
    PHP常用类
    收藏:五种开源协议的比较(BSD,Apache,GPL,LGPL,MIT)
    在 Windows 上部署 Qt 应用程序
    解决 MinGW5.14 编译 QT4.4.3 报错的问题
    懒人制作 deb 包
    NET 自定义配置文件 Configuration
  • 原文地址:https://www.cnblogs.com/yuanyajiao/p/4376683.html
Copyright © 2020-2023  润新知