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 }

    运行结果:

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

  • 相关阅读:
    leetcode 190 Reverse Bits
    vs2010 单文档MFC 通过加载位图文件作为客户区背景
    leetcode 198 House Robber
    记忆化搜索(DP+DFS) URAL 1183 Brackets Sequence
    逆序数2 HDOJ 1394 Minimum Inversion Number
    矩阵连乘积 ZOJ 1276 Optimal Array Multiplication Sequence
    递推DP URAL 1586 Threeprime Numbers
    递推DP URAL 1167 Bicolored Horses
    递推DP URAL 1017 Staircases
    01背包 URAL 1073 Square Country
  • 原文地址:https://www.cnblogs.com/DreamerT/p/9825848.html
Copyright © 2011-2022 走看看