描述
输入一个整数矩阵,计算位于矩阵边缘的元素之和。
所谓矩阵边缘的元素,就是第一行和最后一行的元素以及第一列和最后一列的元素。
输入
第一行为整数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;
}
这只是一个二维数组和指针的简单应用,一个小开始……