作者:心理学点滴_312 | 来源:互联网 | 2023-10-10 13:59
本文由编程笔记#小编为大家整理,主要介绍了二维数组最大子数组和的求解相关的知识,希望对你有一定的参考价值。
一.设计思想
首先要用一段代码,可以读入txt文件里的二维数组。需要将txt文件放入同一目录。
其次要用一段代码得到最大子数组的和:主要思路与求一维数组方法相差不多,不过要有更多的循环和判断汲取了先者的成果,我们得出了方法。思路如下:
1.得到子数组的最大行、列数,从第一行开始,确定最大子数组的行列范围。
2.将确定的范围,把最大子数组按照一列有几个数,按行分开成。(例如第一个组中只有一行,而第二个组中有两行,列数和数组的列数保持一致)
3,对2中得到的数组,利用一维数组求子数组之和的方法。求出最大值,比较得到最大的一个
4.使行列的最大上界下减1,重复进行第2 、3、4步。
二.代码
1 #include<iostream>
2 #include
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‘ ‘-‘);
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)
37 {
38 for(j=0;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//确定子数组的最大上界(为第i行)
49 {
50 while(m+i//确定子数组有m+i行
51 {
52 //把子数组当成一位数组一样,求最大子数组的和
53 for(j=0;j)
54 {
55 sum[j]=sum[j]+A[m+i][j];
56
57 }
58 max=0;
59 for(j=0;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)
78 {
79 sum[j]=0;
80 }
81 }
82 cout<<result;
83 return 0;
84 }
三.运行截图及所用txt数据
四.项目计划总结
五.和队友并肩作战的照片(苏雄,张洪胜)