monzaid 2019-12-04 01:38 采纳率: 0%
浏览 156

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

测试用例

图片说明

但是上交的是返回

图片说明

展开全部

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-07-28 19:31
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    你的代码有一些问题,主要在于如何计算每个切面的元素之和。正确的做法是遍历整个三维数组,并在每个切面中累加所有元素。这里是一个修改后的版本:

    #include <stdio.h>
    
    int main() {
        int a, b, c;
        scanf("%d %d %d", &a, &b, &c);
    
        int **p = (int **)malloc(a * sizeof(int *));
        for (int i = 0; i < a; i++) {
            p[i] = (int *)malloc(b * sizeof(int));
            for (int j = 0; j < b; j++) {
                p[i][j] = (int *)malloc(c * sizeof(int));
            }
        }
    
        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 maxSum = INT_MIN;
        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 (maxSum < sum) {
                maxSum = 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 (maxSum < sum) {
                maxSum = 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 (maxSum < sum) {
                maxSum = sum;
            }
        }
    
        printf("%d\n", maxSum);
        free(p);
        return 0;
    }
    

    这个版本中的 free() 函数用于释放分配的内存。

    展开全部

    评论
    编辑
    预览

    报告相同问题?

    手机看
    程序员都在用的中文IT技术交流社区

    程序员都在用的中文IT技术交流社区

    专业的中文 IT 技术社区,与千万技术人共成长

    专业的中文 IT 技术社区,与千万技术人共成长

    关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

    关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

    客服 返回
    顶部