地雷探测(C++、C语言)

题目描述
有一片废弃的农场包含了n行,每行m块土地,每块土地下方埋有一定数量的地雷。一支安全部队为了安全穿过这片农田首先在左上方(第1行的第1块土地)出安插了一个地雷探测装置,该装置可以探测到以其位置为左上方顶点的k1行k2列共k1*k2块矩形土地区域范围内的所有地雷。请问该枚装置可以检测到多少枚地雷?

输入格式
第1行两个整数n和m,分别表示行数和列数。

第2~(n+1)行,每行m个整数Wi,描述了n行m列的土地下方埋藏的地雷数量。

最后一行输入装置可探测的行数k1和列数k2。

img

n和m<=100,定义一个int w[102][102]的数组存储每个位置上的地雷数量,然后从0-k1,0-k2双层for循环遍历累加即可。
运行结果:

img

C代码:

#include <stdio.h>
#include <stdlib.h>
int main()
{
    int w[102][102] = { 0 };
    int n, m;
    int i, j;
    int k1, k2;
    int sum = 0;
    scanf("%d %d", &n, &m); //读取n和m
    for (i = 0; i < n; i++)
    {
        for (j = 0; j < m; j++)
            scanf("%d", &w[i][j]);
    }
    scanf("%d %d", &k1, &k2); //读取k1 、k2
    //遍历
    for (i = 0; i < k1; i++)
    {
        for (j = 0; j < k2; j++)
            sum += w[i][j];
    }
    printf("%d", sum);
    return 0;
}

C++代码:

#include <iostream>
using namespace std;
int main()
{
    int w[102][102] = { 0 };
    int n, m;
    int i, j;
    int k1, k2;
    int sum = 0;
    cin >>n >>m; //读取n和m
    for (i = 0; i < n; i++)
    {
        for (j = 0; j < m; j++)
            cin >>w[i][j];
    }
    cin >> k1 >> k2; //读取k1 、k2
    //遍历
    for (i = 0; i < k1; i++)
    {
        for (j = 0; j < k2; j++)
            sum += w[i][j];
    }
    cout << sum;
    return 0;
}

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

int main()
{
    int n, m;
    scanf("%d %d", &n, &m);

    int** W = (int**)malloc(sizeof(int*) * (n + 1));
    int** S = (int**)malloc(sizeof(int*) * (n + 1));
    for (int i = 0; i <= n; i++)
    {
        W[i] = (int*)malloc(sizeof(int) * (m + 1));
        S[i] = (int*)malloc(sizeof(int) * (m + 1));
        for (int j = 0; j <= m; j++)
        {
            W[i][j] = 0;
            S[i][j] = 0;
        }
    }

    for (int i = 1; i <= n; i++)
    {
        for (int j = 1; j <= m; j++)
        {
            scanf("%d", &W[i][j]);
            S[i][j] = S[i - 1][j] + S[i][j - 1] - S[i - 1][j - 1] + W[i][j];
        }
    }

    int k1, k2;
    scanf("%d %d", &k1, &k2);

    int max_sum = 0;
    for (int i = 1; i <= n - k1 + 1; i++)
    {
        for (int j = 1; j <= m - k2 + 1; j++)
        {
            int sum = S[i + k1 - 1][j + k2 - 1] - S[i + k1 - 1][j - 1] - S[i - 1][j + k2 - 1] + S[i - 1][j - 1];
            if (sum > max_sum)
            {
                max_sum = sum;
            }
        }
    }

    printf("%d\n", max_sum);

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

    return 0;
}

https://blog.csdn.net/weixin_62802134/article/details/128140841

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632