zoukankan      html  css  js  c++  java
  • 结对开发2//返回一个二维整数组中最大子数组的和

    题目:返回一个二维整数数组中最大子数组的和

    要求:

    1.输入一个二维整型数组,数组里有正数也有负数       

    2.二维数组中,连续的一个子矩阵组成一个子数组,每个子数组都有一个和  

    3.求所有子数组和

    同组人:林梦颖

    源程序:

     1 #include <stdio.h>
     2 int MAX(int a, int b)//求最大值
     3 {
     4     if (a > b)
     5         return a;
     6     else
     7         return b;
     8 }
     9 int main(void)
    10 {
    11     int a[3][6] = { { 5, 6, -3, 8, -9, 2 }, { 1, -12, 20, 0, -3, -5 }, { -9, -7, -3, 6, 7, -1 } };//先定义一个数组
    12     printf("array a:
    ");
    13     for (int i = 0; i<3; i++)
    14     {
    15         for (int j = 0; j<6; j++)
    16         {
    17             printf("%5d", a[i][j]);
    18         }
    19         printf("
    ");
    20     }
    21 
    22     int i, j, m=3, n=6,sum;
    23     int p[3][6];
    24     int max = a[0][0];
    25     for (i = 0; i<n; i++)
    26     {
    27     
    28         for (j = 0; j<m; j++)
    29         {
    30             if (i == 0)
    31             {
    32                 if (j == 0)
    33                 {
    34                     p[i][j] = a[i][j];
    35                     sum = p[i][j];
    36                     max = MAX(sum, max);
    37 
    38                 }
    39                     
    40                 else
    41                 {
    42                     p[i][j] = p[i][j - 1] + a[i][j];
    43                     sum = p[i][j];
    44                     max = MAX(sum, max);
    45                 }
    46                     
    47             }
    48             else
    49             {
    50                 if (j == 0)
    51                 {
    52 
    53                     p[i][j] = p[i - 1][j] + a[i][j];
    54                     sum = p[i][j];
    55                     max = MAX(sum, max);
    56                 }
    57                 else
    58                 {
    59                     p[i][j] = p[i][j - 1] + p[i - 1][j] - p[i - 1][j - 1] + a[i][j];
    60                     sum = p[i][j];
    61                     max = MAX(sum, max);
    62                 }
    63             }
    64         }
    65     }
    66     printf("maxsum=%d", max);
    67     getchar();
    68     getchar();
    69     return 0;
    70 }

    运行结果:

    总结:  在本次任务中,看似简单清晰的思路,在代码上实践起来却遇到了重重困难。最初的想法是遍历整个子数组,发现时间复杂度太大,完成起来较为困难。经过和组员一同寻找网络资料,翻阅图书,找到较为简便的思路方法,将这个方法逐步呈现在电脑屏幕上。由最初的简陋的框架,一步步将其完善。最终圆满完成了老师布置的任务。从最初的遥不可及到完成任务,是一个完善学习完善自己的一个路程,今后也会不放弃的坚持完成每一次作业,更上一层楼! 

  • 相关阅读:
    NOIP2016——组合数问题
    BZOJ3450——Tyvj1952(OSU?)
    洛谷4316——绿豆蛙的归宿(期望)
    BZOJ1997——次小生成树(严格次小生成树)
    USACO2002-OPEN-GREEN(GREEN秘密的牛奶管道SECRET)
    Linux系统应急响应
    Linux系统登录相关
    (翻译)Attacking Interoperability(攻击互操作性)in Black Hat 2009 研究报告
    HTTP参数污染(HPP)漏洞
    逻辑漏洞之越权访问漏洞
  • 原文地址:https://www.cnblogs.com/DreamerT/p/9825848.html
Copyright © 2011-2022 走看看