链接:https://www.nowcoder.com/question/next?pid=4111169&qid=76265&tid=17079055
时间限制:1秒
空间限制:32768K
在一个N*N的数组中寻找所有横,竖,左上到右下,右上到左下,四种方向的直线连续D个数字的和里面最大的值
输入描述:
每个测试输入包含1个测试用例,第一行包括两个整数 N 和 D :
3 <= N <= 100
1 <= D <= N
接下来有N行,每行N个数字d:
0 <= d <= 100
输出描述:
输出一个整数,表示找到的和的最大值
输入例子1:
4 2
87 98 79 61
10 27 95 70
20 64 73 29
71 65 15 0
输出例子1:
193
代码实现如下:
#include<iostream>
using namespace std;
int main(){
int N,D;
cin>>N>>D;
int arr[101][101] = {0};
for(int i=1;i<=N;i++)
for(int j=1;j<=N;j++)
cin>>arr[i][j];
int maxSum = -99999;
int sum;
for(int i = 1;i<=N;i++){
for(int j = 1;j<=N;j++){
sum = 0;
//横向
if(j <= N-D+1){
for(int k=j;k<=j+D-1;k++)
sum += arr[i][k];
if(sum > maxSum) maxSum = sum;
}
sum = 0;
//纵向
if(i <= N-D+1){
for(int k=i;k<=i+D-1;k++)
sum += arr[k][j];
if(sum > maxSum) maxSum = sum;
}
sum = 0;
//左上到右下
if(i <= N-D+1 && j <= N-D+1){
for(int k=i,z=j;k<=i+D-1,z<=j+D-1;k++,z++)
sum += arr[k][z];
if(sum > maxSum) maxSum = sum;
}
sum = 0;
//右上到左下
if(i <= N-D+1 && j >= D){
for(int k=i,z=j;k<=i+D-1,z>=j-D+1;k++,z--)
sum += arr[k][z];
if(sum > maxSum) maxSum = sum;
}
}
}
cout<<maxSum<<endl;
return 0;
}
运行结果如下: