给出阶次为'n'的二维正方形矩阵,找到对角线元素和所有边界元素的总和。边界元素是指存在于矩阵所有四个边界上的元素。
任何人都可以用Java编写此代码吗? 数组的大小将始终为N * N。
给出5 * 5数组
8 18 18 1 10
12 3 13 6 19
17 11 18 10 19
10 13 12 11 14
3 1 19 11 1
输出:232
答案 0 :(得分:0)
为了实现所需的功能,您应该了解矩阵的一些有趣属性。
for (int i = ; i < n; i ++ )
sum += matrix[0][i]
这意味着您正在遍历第一行的每个元素。
2。然后,您应该尝试对矩阵的第一列执行相同的操作,代码将如下所示:
for (int i = ; i < n; i ++ )
sum += matrix[i][0]
对于最后一行或最后一列,您必须将0替换为n-1并完成工作。尝试使用这些索引,看看发生了什么。
有用的链接:https://www.go4expert.com/forums/border-elements-matrix-t33678/
主对角线有一个有趣的性质,即i等于j。例如,在平方矩阵中,主对角线的元素位于0,0-1,1-2,2的位置,依此类推...
browse all rows
browse all cells
if i == j (is in main diagonal):
increase one sum
if i == n - j + 1 (the other diagonal)
increase the second sum
第二个对角线的公式是i应该等于n-j + 1。
答案 1 :(得分:0)
我已经解决了这个问题,这是解决方案
导入java.util.Scanner;
公共类主要{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int M = sc.nextInt();
int[][] arr = new int[M][M];
for (int row = 0; row < M; row++) {
for (int col = 0; col < M; col++) {
arr[row][col] = sc.nextInt();
}
}
int boundrySum = 0, requiredSum = 0;
for (int row = 0; row < M; row++) {
for (int col = 0; col < M; col++) {
if (row == 0 || col == 0 || row == M - 1 || col == M - 1) {
boundrySum = boundrySum + arr[row][j];
}
}
}
int diagonal1Sum = 0, diagonal2Sum = 0;
for (int row = 0; row < M; row++) {
for (int col = 0; col < M; col++) {
if (row == col)
diagonal1Sum = diagonal1Sum + arr[row][col];
else if ((row + col) == (M - 1))
diagonal2Sum = diagonal2Sum + arr[row][col];
}
}
requiredSum = boundrySum + diagonal1Sum + diagonal2Sum
- (arr[0][0] + arr[0][M - 1] + arr[M - 1][0] + arr[M - 1][M - 1]);
System.out.println(requiredSum);
}
}