抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

总时间限制: 1000ms 内存限制: 65536kB

描述

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

输入

第一行为整数 k,表示有 k 组数据。
每组数据有多行组成,表示一个矩阵:
第一行分别为矩阵的行数 m 和列数 n(m < 100,n < 100),两者之间以空格分隔。
接下来输入的 m 行数据中,每行包含 n 个整数,整数之间以空格作为间隔。

输出

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

样例输入

1
2
3
4
5
6
7
8
9
10
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

样例输出

1
2
5
15

思路

直接计算

  1. for 循环输入矩阵,在循环中用 if 判断是否为边缘元素,是则加入 sum 中。
  2. 输出 sum

使用数组

  1. array<array<int, 100>, 100> a; 定义二维数组。
  2. for 循环输入矩阵。
  3. for 循环判断是否为边缘元素,是则加入 sum 中。
  4. 输出 sum

Code

C++

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <bits/stdc++.h>
using namespace std;

int main() {
int k, m, n, sum = 0, tmp;
cin >> k;
for(int i = 1; i <= k; i++) {
cin >> m >> n;
for(int j = 0; j < m; j++) {
for(int k = 0; k < n; k++) {
cin >> tmp;
if(j == 0 || k == 0 || j == m-1 || k == n-1) sum += tmp;
}
}
cout << sum << endl;
sum = 0;
}
}

C++ STL

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <bits/stdc++.h>
using namespace std;

int main() {
int k, m, n, sum = 0, tmp;
cin >> k;
for(int i = 1; i <= k; i++) {
cin >> m >> n;
array<array<int, 100>, 100> a;
for(int j = 0; j < m; j++) {
for(int k = 0; k < n; k++) {
cin >> a[j][k];
}
}
for(int j = 0; j < m; j++) {
for(int k = 0; k < n; k++) {
if(j == 0 || k == 0 || j == m-1 || k == n-1) sum += a[j][k];
}
}
cout << sum << endl;
sum = 0;
}
}

C

解法一:直接计算

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>

int main() {
int k, m, n, sum = 0, tmp;
scanf("%d", &k);
for(int i = 1; i <= k; i++) {
scanf("%d %d", &m, &n);
for(int j = 0; j < m; j++) {
for(int k = 0; k < n; k++) {
scanf("%d", &tmp);
if(j == 0 || k == 0 || j == m-1 || k == n-1) sum += tmp;
}
}
printf("%d\n", sum);
sum = 0;
}
}

解法二:使用数组

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>

int main() {
int k, m, n, sum = 0, tmp;
scanf("%d", &k);
for(int i = 1; i <= k; i++) {
scanf("%d %d", &m, &n);
int a[100][100];
for(int j = 0; j < m; j++) {
for(int k = 0; k < n; k++) {
scanf("%d", &a[j][k]);
}
}
for(int j = 0; j < m; j++) {
for(int k = 0; k < n; k++) {
if(j == 0 || k == 0 || j == m-1 || k == n-1) sum += a[j][k];
}
}
printf("%d\n", sum);
sum = 0;
}
}