解题思路:
我们需要额外设立一个二维数组来存放每一列数组的和如下所示:
比如先假设一个二位数组:
1 2 3
4 5 6
7 8 9
那么这个额外的数组就应该是:
1 2 3
5 7 9
12 15 18
代码实现:
for(n=1;n<=j;n++){
for(m=1;m<=k;m++){
if(n==1){
b[n][m]=a[n][m];
continue;
}
b[n][m]=b[n-1][m]+a[n][m];
}
}
最后用最大段子和思想把>0的留下,小于0的去除在进行比较即可。
注意事项:
参考代码:
#include<stdio.h>
int main(){
int j,k,n,m,a[1000][1000],b[1000][1000];
scanf("%d %d",&j,&k);
for(n=1;n<=j;n++){
for(m=1;m<=k;m++){
scanf("%d",&a[n][m]);
}
}
for(n=1;n<=j;n++){
for(m=1;m<=k;m++){
if(n==1){
b[n][m]=a[n][m];
continue;
}
b[n][m]=b[n-1][m]+a[n][m];
}
}
int max=0,sum=0,z,temp=-99999;
for(n=1;n<=j;n++){
for(m=n;m<=j;m++){
for(z=1;z<=k;z++){
sum=b[m][z]-b[n-1][z];
if(temp>=0){
temp=temp+sum;
if(temp>max) max=temp;
}
else if(temp<0){
temp=sum;
if(temp>max) max=temp;
}
}
temp=0;
}
}
printf("%d",max);
return 0;
}
0.0分
1 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复