• 二维数组最大子数组和的求解


     一.设计思想
          首先要用一段代码,可以读入txt文件里的二维数组。需要将txt文件放入同一目录。 
          其次要用一段代码得到最大子数组的和:主要思路与求一维数组方法相差不多,不过要有更多的循环和判断汲取了先者的成果,我们得出了方法。思路如下:

       1.得到子数组的最大行、列数,从第一行开始,确定最大子数组的行列范围。

       2.将确定的范围,把最大子数组按照一列有几个数,按行分开成。(例如第一个组中只有一行,而第二个组中有两行,列数和数组的列数保持一致)

       3,对2中得到的数组,利用一维数组求子数组之和的方法。求出最大值,比较得到最大的一个

       4.使行列的最大上界下减1,重复进行第2 、3、4步。
    二.代码
     1 #include<iostream>
     2 #include <stdio.h> 
     3 using namespace std;
     4 
     5 FILE *fpRead=fopen("input.txt","r");
     6 
     7 char cgetchar(){
     8     char c;
     9     fscanf(fpRead,"%c",&c);
    10     return c;
    11 }
    12 
    13 int getnum(){
    14     char c;
    15     int num = 0, fuhao = 1;
    16     while((c = cgetchar()) != EOF && ('0' > c || '9' < c) && c != '-');
    17     if(c == '-') fuhao = -1;
    18     else num = c - '0';
    19     while((c = cgetchar()) != EOF && '0' <= c && '9' >= c){
    20         num = num * 10 + c - '0';
    21     }
    22     return num * fuhao;
    23 }
    24 
    25 int main ()
    26 {
    27     int x,y,i,j,m=0,A[100][100];
    28  
    29     x = getnum();
    30     y = getnum();
    31     if(x>100||y>100)
    32     {
    33         cout<<"请重新输入:";
    34         cin>>x>>y;
    35     }
    36     for(i=0;i<x;i++)
    37     {
    38         for(j=0;j<y;j++)
    39         {
    40             A[i][j] = getnum();
    41             printf("%d ", A[i][j]); 
    42         }
    43         printf("
    ");
    44  
    45     }
    46     int sum[100]={0},max=0,result=A[0][0];
    47  
    48     for(i=0;i<x;i++)//确定子数组的最大上界(为第i行)
    49     {
    50         while(m+i<x)//确定子数组有m+i行
    51         {
    52             //把子数组当成一位数组一样,求最大子数组的和
    53             for(j=0;j<y;j++)
    54             {
    55                 sum[j]=sum[j]+A[m+i][j];
    56  
    57             }
    58             max=0;
    59             for(j=0;j<y;j++)
    60             {
    61                 if(max+sum[j]>sum[j])
    62                 {
    63                     max=max+sum[j];
    64                 }
    65                 else
    66                 {
    67                     max=sum[j];
    68                 }
    69                 if(max>result)
    70                 {
    71                     result=max;
    72                 }
    73             }
    74             m++;//是子数组的行数+1
    75         }
    76         m=0;
    77         for(j=0;j<y;j++)
    78         {
    79             sum[j]=0;
    80         }
    81     }
    82     cout<<result;
    83     return 0;
    84 }

    三.运行截图及所用txt数据

    四.项目计划总结

    五.和队友并肩作战的照片(苏雄,张洪胜)

  • 相关阅读:
    云时代架构阅读笔记十一——分布式架构中数据一致性常见的几个问题
    云时代架构阅读笔记十——支付宝架构师眼中的高并发架构
    云时代架构阅读笔记九——Disruptor无锁框架为啥这么快
    云时代架构阅读笔记八——JVM性能调优
    lightoj 1024 (高精度乘单精度)
    lightoj 1023
    lightoj 1022
    codeforces 260 div2 C题
    codeforces 260 div2 B题
    codedorces 260 div2 A题
  • 原文地址:https://www.cnblogs.com/4EY4EVER/p/9822471.html
Copyright © 2020-2023  润新知