切面
Description
给出一个长方体,求该长方体每个正切面上的元素之和的最大值。
正切面的意思就是与长方体某一面平行的切面。如果把长方体看作是一个三维数组,那么每个切面就是一个二维数组。
Input
第一行是3个正整数a、b、c,分别表示长方体的长、宽、高。0 < a, b, c ≤ 60
接下来是 c 块数据,每一块数据有a行、每行b个整数。
Output
输出切面元素和的最大值。
Sample Input
3 3 3
1 2 3
1 2 3
1 2 3
1 2 3
1 2 3
1 2 3
1 2 3
1 2 3
1 2 3
Sample Output
27
我的代码
#include <stdio.h>
#include <stdlib.h>
int main (){
//长a,宽b,高c
int a, b, c;
scanf("%d %d %d", &a, &b, &c);
//定义动态内存
int ***p = (int ***) malloc(sizeof(int **) * a);
for (int i = 0; i < a; i++){
p[i] = (int **) malloc(sizeof(int *) * b);
for (int j = 0; j < b; j++)
p[i][j] = (int *) malloc(sizeof(int) * c);
}
//读入数据
for (int i = 0; i < a; i++)
for (int j = 0; j < b; j++)
for (int k = 0; k < c; k++)
scanf("%d", &p[i][j][k]);
int max;
//找最大切面
for (int i = 0; i < a; i++){
int sum = 0;
for (int j = 0; j < b; j++)
for (int k = 0; k < c; k++)
sum += p[i][j][k];
if (i == 0)//当第一个切面时最大切面为第一个切面
max = sum;
else if (sum > max)
max = sum;
}
for (int j = 0; j < b; j++){
int sum = 0;
for (int i = 0; i < a; i++)
for (int k = 0; k < c; k++)
sum += p[i][j][k];
if (sum > max)
max = sum;
}
for (int k = 0; k < c; k++){
int sum = 0;
for (int i = 0; i < a; i++)
for (int j = 0; j < b; j++)
sum += p[i][j][k];
if (sum > max)
max = sum;
}
printf("%d", max);
//释放p
for (int i = 0; i < a; i++){
for (int j = 0; j < b; j++)
free(p[i][j]);
free(p[i]);
}
free(p);
return 0;
}
测试用例
但是上交的是返回