描述

输入一个整数矩阵,计算位于矩阵边缘的元素之和。所谓矩阵边缘的元素,就是第一行和最后一行的元素以及第一列和最后一列的元素。

输入

第一行为整数k,表示有k组数据。

每组数据有多行组成,表示一个矩阵:

第一行分别为矩阵的行数m和列数n(m < 100,n < 100),两者之间以空格分隔。

接下来输入的m行数据中,每行包含n个整数,整数之间以空格作为间隔。

输出

输出对应矩阵的边缘元素和,一个一行。

样例输入

2
4 4
1 1 1 1
0 0 0 0
1 0 1 0
0 0 0 0
3 3
3 4 1
3 7 1
2 0 1
 
 
 

样例输出

5
15
这周的主题是指针
先写了一个没有使用指针的程序
#include<iostream>
using namespace std;

int main() {
    int k=0;
    cin >> k;//输入的数据组数
    for (int i = 0; i < k; i++)
    {
        int m , n;
        cin >> m >> n;//矩阵的大小
        int a[100][100];//存放数据的数组
        int sum = 0;//计算的和
        //输入数据
        for (int j = 0; j < m; j++)
            for (int d = 0; d < n; d++)
                cin >> a[j][d];
        //计算和
        for (int j = 0; j < m; j++)
        {
            //第一行和最后一行所有数据相加
            if (j == 0 || j == m - 1)
            {
                for (int d = 0; d < n; d++)
                    sum = sum + a[j][d];
            }
            //其余行只加第一个和最后一个
            else
                sum = sum + a[j][0] + a[j][n - 1];
        }
        cout << sum << endl;
    }
    return 0;
}

使用指针的程序(仅仅是用指针表达了二维数组,不知道题目的是不是这个意思,还是如果利用指针可以有更好的解法)

#include<iostream>
using namespace std;

int main() {
    int k=0;
    cin >> k;//输入的数据组数
    int sum[100] = { 0 };//边缘和
    for (int i = 0; i < k; i++)
    {
        int m , n;
        cin >> m >> n;//矩阵的大小
        int a[100][100];//存放数据的数组
        int(*p)[100];//定义一个指向“包含100个int型元素的一维数组”的指针
        p = a;//此时p指向的是数组a[0]的首地址
        //输入数据
        for (int j = 0; j < m; j++)
        {
            for (int d = 0; d < n; d++)
                cin >> *(*(p + j) + d);
            //*(p+j)是相当于a[j],*((p+j)+d)相当于a[j][d]
        }

        //计算和
        //第一行和最后一行的元素全部相加
        //其余行的元素只加第一个和最后一个
        for (int j = 0; j < m; j++)
        {
            if (j == 0 || j == m - 1)
            {
                for (int d = 0; d < n; d++)
                    sum[i] = sum[i] + *(*(p + j) + d);
            }
            else
                sum[i] = sum[i] + *(*(p + j)) + *(*(p + j) + n - 1);

        }
    }
    for (int i = 0; i < k; i++)
        cout << sum[i] << endl;
    return 0;
}

之前第二周的最后一题匹配括号没有做出来于是就放着,以后有想法了再去解。

01-23 17:58
查看更多