如何计算二维阵列中8个相邻元素的总和? [英] How Do I Can Computing The Sum Of 8-Neighbor Element In 2D Array?

查看:94
本文介绍了如何计算二维阵列中8个相邻元素的总和?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

sum = matrix[i-1][j-1] + matrix[i-1][j] + matrix[i-1][j+1]
          + matrix[i][j-1] + matrix[i][j+1]
            + matrix[i+1][j-1] + matrix[i+1][j] + matrix[i+1][j+1] ;





我只知道。但我不知道怎么做。



i'm just know that . but i don't know how.

推荐答案

#include <stdio.h>

#define ROWS 8
#define COLS 8

typedef int matrix_t[ROWS][COLS];

static int sum(matrix_t &matrix, int row, int col)
{
    int sum = 0;
    for (int i = -1; i < 2; i++)
    {
        for (int j = -1; j < 2; j++)
        {
            // skip center cell
            if (i == j) continue;
            // skip rows out of range.
            if ( (i + row) < 0 || (i + row >= ROWS) continue;
            // skip columns out of range.
            if ( (j + col) < 0 || (j + col >= COLS) continue;
            // add to sum.
            sum += matrix[i + row][j + col];
        }
    }
    return sum;
}

static int make(matrix_t &result, const matrix_t &source)
{
    for (int i = 0; i < ROWS; i++)
        for (int j = 0; j < COLS; j++)
            result[i][j] = sum(source, i, j);
}

// print a matrix to stdout.
static int print(const matrix_t &source)
{
    for (int i = 0; i < ROWS; i++)
    {
        for (int j = 0; j < COLS; j++)
            printf("\t%d", source[i][j]);
        printf("\n");
    }
}

// unit test
int main(int argc, char *argv[])
{
    matrix_t result = {0};
    const matrix_t source =
    {
        {1, 2, 3, 4, 5, 6, 7, 8},
        {1, 2, 3, 4, 5, 6, 7, 8},
        {1, 2, 3, 4, 5, 6, 7, 8},
        {1, 2, 3, 4, 5, 6, 7, 8},
        {1, 2, 3, 4, 5, 6, 7, 8},
        {1, 2, 3, 4, 5, 6, 7, 8},
        {1, 2, 3, 4, 5, 6, 7, 8},
        {1, 2, 3, 4, 5, 6, 7, 8}
    };
    make(result, source);
    puts("Source:");
    print(source);
    puts("Result:");
    print(result);
    return 0;
}
</stdio.h>


这篇关于如何计算二维阵列中8个相邻元素的总和?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆