描述

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

输入

第一行为整数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 count;
	cin >> count;
	while (count-- > 0) {
		int m, n;
		cin >> m >> n;
		int c[100][100] = { 0 };
		for (int i = 0; i < m; i++) {
			for (int j = 0; j < n; j++) {
				cin >> c[i][j];
			}
		}
		int sum = 0;
		for (int i = 0; i < m; i++) {
			if (i == 0 || i == m-1) {
				for (int j = 0; j < n; j++) {
					sum += c[i][j];
				}
			}
			else {
				sum += c[i][0] + c[i][n - 1];
			}
		}
		cout << sum << endl;
	}
	return 0;
}

 使用指针表示:

#include<iostream>
using namespace std;

int main() {
	int count;
	cin >> count;
	while (count-- > 0) {
		int m, n;
		cin >> m >> n;
		int c[100][100] = { 0 };
		int(*p)[100] = c;

		//使用指向有100个元素数组的指针
		//p+1就是指向下一个含有100个元素的数组
		for (int i = 0; i < m; i++) {
			for (int j = 0; j < n; j++) {
				//scanf("d", *(*(p + i) + j));
				cin>> *(*(p + i) + j);
			}
		}
		int sum = 0;
		for (int i = 0; i < m; i++) {
			if (i == 0 || i == m - 1) {
				for (int j = 0; j < n; j++) {
					sum += p[i][j];
				}
			}
			else {
				sum += *(*(p + i)+0) + *(*(p + i) + n - 1);
			}
		}
		printf("%d\n", sum);
	}
	return 0;
}

这只是一个二维数组和指针的简单应用,一个小开始……