总时间限制: 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
|
样例输出
思路
直接计算
- 用
for
循环输入矩阵,在循环中用 if
判断是否为边缘元素,是则加入 sum
中。
- 输出
sum
。
使用数组
- 用
array<array<int, 100>, 100> a;
定义二维数组。
- 用
for
循环输入矩阵。
- 用
for
循环判断是否为边缘元素,是则加入 sum
中。
- 输出
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; } }
|
文字排版
总时间限制: 1000ms 内存限制: 65536kB
描述
给一段英文短文,单词之间以空格分隔(每个单词包括其前后紧邻的标点符号)。请将短文重新排版,要求如下:
每行不超过 80 个字符;每...
删除数组中的元素(链表)
总时间限制: 1000ms 内存限制: 65536kB
描述
给定 N 个整数,将这些整数中与 M 相等的删除
假定给出的整数序列为:1,3,3,0,-3,5,6,8,3,10,22,-1,3...