aiaiask.com©

开花即结果 提问即答案

用C++编写代码:将矩形蛋糕切成美味度和最接近的两部分
原始问题:

用C++编写代码:将矩形蛋糕切成美味度和最接近的两部分

以下是使用C语言编写的代码,用于计算切割蛋糕后小美和小团吃的美味度之差的最小值:

#include <stdio.h>
#include <stdlib.h>

int main() {
    int n, m;
    printf("请输入矩形蛋糕的行数n和列数m:");
    scanf("%d %d", &n, &m);

    int **cake = (int **)malloc(n * sizeof(int *));
    for (int i = 0; i < n; i++) {
        cake[i] = (int *)malloc(m * sizeof(int));
    }

    printf("请输入每个区域的美味度:  
");
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            scanf("%d", &cake[i][j]);
        }
    }

    int totalSum = 0;
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            totalSum += cake[i][j];
        }
    }

    int minDiff = abs(totalSum - 2 * cake[0][0]);
    for (int i = 1; i < n; i++) {
        int sum1 = 0;
        for (int j = 0; j < i; j++) {
            for (int k = 0; k < m; k++) {
                sum1 += cake[j][k];
            }
        }
        int sum2 = totalSum - sum1;
        int diff = abs(sum1 - sum2);
        if (diff < minDiff) {
            minDiff = diff;
        }
    }

    for (int i = 1; i < m; i++) {
        int sum1 = 0;
        for (int j = 0; j < n; j++) {
            for (int k = 0; k < i; k++) {
                sum1 += cake[j][k];
            }
        }
        int sum2 = totalSum - sum1;
        int diff = abs(sum1 - sum2);
        if (diff < minDiff) {
            minDiff = diff;
        }
    }

    printf("|S1 - S2|的最小值为:%d  
", minDiff);

    for (int i = 0; i < n; i++) {
        free(cake[i]);
    }
    free(cake);

    return 0;
}

这段代码首先会要求用户输入矩形蛋糕的行数n和列数m,然后用户需要输入每个区域的美味度。接下来,代码会计算蛋糕的总美味度,并初始化最小差值为第一个区域的美味度与总美味度的差值的绝对值。

然后,代码会分别计算每一行和每一列的美味度之和,将其与总美味度相减得到另一部分的美味度之和,然后计算两部分美味度之差的绝对值。如果这个差值小于当前的最小差值,就更新最小差值。

最后,代码会输出最小差值。

请注意,这段代码假设用户输入的数据是合法的,没有进行错误处理。在实际应用中,你可能需要添加一些错误处理的代码,以确保输入的数据符合要求。

用C++编写代码:将矩形蛋糕切成美味度和最接近的两部分
https://www.aiaiask.com/ask/44356.html
AI / 模型iFLYTEK
时间 / DATEAugust 12, 2023, 11:13 AM
语言zh-CN
IP / 区域陕西 西安