zoukankan      html  css  js  c++  java
  • 结对开发四~~

    一、题目要求

      题目:返回一个整数数组中最大子数组的和。
      要求:
      输入一个整形数组,数组里有正数也有负数。
      数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。
      如 果数组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 //结对人员:盖相庚  曹美娜
     2 //开发时间:2015/3/27
     3 
     4 #include "stdio.h"
     5 #include"stdlib.h"
     6 #include"time.h"
     7 #define N 1000 
     8 int compare( int arry[],int length)
     9 {
    10     int max[N],max1;
    11     int maxlocat[N];
    12     for(int j=0;j<(length+1)/2;j++)
    13     {
    14         int sum=0;
    15         max1=-9999999;
    16         int z=0;
    17         for(int i=j;i<(length+1)/2+j;i++)
    18         {
    19             sum=sum+arry[i];
    20             if(sum>=max1)
    21             {
    22                 max1=sum;
    23                 z++;
    24             }
    25         }
    26         max[j]=max1;
    27         maxlocat[j]=z;
    28     //    printf("包含数组中第%d个数的所有子数组中和最大的值为:%d
    ",j+1,max[j]);
    29     }
    30     int fmax=max[0];
    31     int q=0;
    32     for(int i=0;i<(length+1/2);i++)
    33     {    
    34         if(max[i]>fmax)
    35         {
    36             fmax=max[i];
    37             q++;
    38         }
    39     }
    40 
    41     int locat=maxlocat[q];
    42 
    43     printf("最大子数组为:
    ");
    44     for(int num=q;num<q+locat;num++)
    45     {
    46         printf("%d ",arry[num]);
    47     }
    48 
    49     printf("其和为:%d
    ",fmax);
    50     return 0;
    51 }
    52 
    53 int main(int argc, char* argv[])
    54 {
    55     int arry[N];
    56     int length;
    57 
    58     printf("请输入要比较整数的个数:");
    59     scanf("%d",&length);
    60     printf("请输入整数
    ");
    61     for(int i=0;i<length;i++)
    62     {
    63         scanf("%d",&arry[i]);    
    64     }
    65      
    66     int num=0;
    67     for(int j=length;j<2*length-1;j++)      //将输入的这几个数再向后拓展
    68     {
    69         arry[j]=arry[num];
    70         num++;
    71     }
    72 
    73     printf("$由这几个数形成的环形数组
    ");
    74     compare(arry,2*length-1);
    75     return 0;
    76 }
    复制代码

    四、截图

    发现输出结果错误

    后经调试发现

    改正为

    改正后的输出结果为

    五、结对心得

      此次上面的内容我还是照搬的娜姐的上去了。。。毕竟主程序什么的都是娜姐写上去的所以还是诚实点好。。娜姐帮了很大的忙...我老是出去玩所以每次都是娜姐找我表示很抱歉。。以后还会努力像娜姐学习,努力努力~~~谢谢娜姐 谢谢老湿~~~~~~~~~~~么么哒

    六、工作照

    好吧照片还是上一次的,是因为我把新拍的给整丢了,老师你可别怪我啊

  • 相关阅读:
    如何将 DataTable 转成 IEnumerable<T> ?
    CodeMonkey少儿编程第7章 函数
    CodeMonkey少儿编程第6章 for循环
    CodeMonkey少儿编程第5章 数组与索引
    CoeMonkey少儿编程第4章 变量
    CodeMonkey少儿编程第3章 times循环
    CodeMonkey少儿编程第2章 turnTo对象
    CodeMonke少儿编程第1章 step与turn
    Web高级 Webpack编译提速思路
    RPC框架
  • 原文地址:https://www.cnblogs.com/gaiiiiiiii/p/4379064.html
Copyright © 2011-2022 走看看