C语言寻找三维数组正切面最大和的值,上交Wrong Answer, 有题目和代码, 望大神指点

切面

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;
}

测试用例

图片说明

但是上交的是返回

图片说明