首页 > 编程语言 > 详细

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

时间:2018-10-20 19:14:12      阅读:40      评论:0      收藏:0      [点我收藏+]

标签:得出   pread   项目   运行   !=   最大值   img   队友   div   

 一.设计思想
      首先要用一段代码,可以读入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("\n");
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数据

技术分享图片

技术分享图片

 

 

技术分享图片

四.项目计划总结

技术分享图片

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

技术分享图片

 

 

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

标签:得出   pread   项目   运行   !=   最大值   img   队友   div   

原文:https://www.cnblogs.com/4EY4EVER/p/9822471.html

(0)
(0)
   
举报
评论 一句话评论(0
0条  
登录后才能评论!
© 2014 bubuko.com 版权所有 鲁ICP备09046678号-4
打开技术之扣,分享程序人生!
             

鲁公网安备 37021202000002号