C++程序 打印矩阵边界元素
给定一个n x m的矩阵。打印矩阵的边界元素。边界元素是指不被四个方向的元素包围的元素,即第一行,第一列,最后一行和最后一列的元素。
示例:
输入:
1 2 3 4
5 6 7 8
1 2 3 4
5 6 7 8
输出:
1 2 3 4
5 8
1 4
5 6 7 8
说明: 打印了矩阵的边界元素。
输入:
1 2 3
5 6 7
1 2 3
输出:
1 2 3
5 7
1 2 3
说明: 打印了矩阵的边界元素。
方法: 思路很简单。遍历矩阵,检查每个元素是否位于边界上,如果是,则打印该元素,否则打印空格字符。
- 算法 :
- 从头到尾遍历数组。
- 将外部循环指向行,内部循环遍历行中的元素。
- 如果元素在矩阵的边界上,则打印该元素,即如果元素在第一行、第一列、最后一行或最后一列,则打印该元素。
- 如果元素不是边界元素,则打印一个空格。
- 实现:
// C++ program to print boundary element
// of matrix.
#include <iostream>
using namespace std;
const int MAX = 100;
void printBoundary(int a[][MAX], int m, int n)
{
for (int i = 0; i < m; i++)
{
for (int j = 0; j < n; j++)
{
if (i == 0 || j == 0 ||
i == n - 1 || j == n - 1)
cout << a[i][j] << " ";
else
cout << " "
<< " ";
}
cout << endl;
}
}
// Driver code
int main()
{
int a[4][MAX] = {{1, 2, 3, 4},
{5, 6, 7, 8},
{1, 2, 3, 4},
{5, 6, 7, 8}};
printBoundary(a, 4, 4);
return 0;
}
输出:
1 2 3 4
5 8
1 4
5 6 7 8
- 复杂度分析:
- 时间复杂度: O(n*n),其中n为数组大小。这是通过矩阵的单次遍历实现的。
- 空间复杂度: O(1)。 因为只需要常量空间。
查找边界元素的总和
给定一个n x m的矩阵。找到矩阵的边界元素的总和。边界元素是指四个方向没有元素环绕的元素,即第一行,第一列,最后一行和最后一列的元素。
示例:
输入:
1 2 3 4
5 6 7 8
1 2 3 4
5 6 7 8
输出: 54
说明: 矩阵的边界元素
1 2 3 4
5 8
1 4
5 6 7 8
Sum = 1+2+3+4+5+8+1+4+5+6+7+8 =54
输入:
1 2 3
5 6 7
1 2 3
输出: 24
说明: 矩阵的边界元素
1 2 3
5 7
1 2 3
Sum = 1+2+3+5+7+1+2+3 = 24
方法: 此想法很简单。遍历矩阵,并检查每个元素是否位于边界上,如果是,则将它们相加以获取所有边界元素的总和。
- 算法:
- 创建一个变量来存储总和,并从开始到结束遍历数组。
- 将外循环分配为指向行的指针,将内部循环遍历行的元素。
- 如果元素位于矩阵的边界上,则将该元素添加到总和中,即如果元素位于第一行、第一列、最后一行、最后一列
- 打印总和。
- 实现:
// C++程序查找矩阵的边界元素之和。
// C++ program to find sum of boundary elements
// of matrix.
#include <iostream>
using namespace std;
const int MAX = 100;
int getBoundarySum(int a[][MAX],
int m, int n)
{
long long int sum = 0;
for (int i = 0; i < m; i++)
{
for (int j = 0; j < n; j++)
{
if (i == 0)
sum += a[i][j];
else if (i == m - 1)
sum += a[i][j];
else if (j == 0)
sum += a[i][j];
else if (j == n - 1)
sum += a[i][j];
}
}
return sum;
}
// Driver code
int main()
{
int a[][MAX] = {{1, 2, 3, 4},
{5, 6, 7, 8},
{1, 2, 3, 4},
{5, 6, 7, 8}};
long long int sum = getBoundarySum(a, 4, 4);
cout << "Sum of boundary elements is " <<
sum;
return 0;
}
输出:
Sum of boundary elements is 54
- 复杂度分析:
- 时间复杂度: O(n*n),其中n是数组的大小。 这是通过对矩阵的单次遍历实现的。
- 空间复杂度: O(1)。 由于只需要一个常量空间。