作者:小白_king | 来源:互联网 | 2023-05-19 08:16
【题目链接】:https:nanti.jisuanke.comt25084【题目描述】:给你一个n×n的矩阵,里面填充1到nxn。例如当n等于3的时候,填充的
【题目链接】:https://nanti.jisuanke.com/t/25084
【题目描述】:给你一个 n×n 的矩阵,里面填充 1到 n x n。例如当 n 等于 3 的时候,填充的矩阵如下。
1 2 3
4 5 6
7 8 9
现在我们把矩阵中的每条边的中点连起来,这样形成了一个新的矩形,请你计算一下这个新的矩形的覆盖的数字的和。比如,n = 3 的时候矩形覆盖的数字如下。
2
4 5 6
8
那么当 n 等于 101 的时候,矩阵和是多少?
【解析】:这道题做了很多遍才做对,刚开始没有理解题意,认为只是计算矩阵两条边就可以,其实题目中要求的是计算两条边为对角线的矩形所覆盖的面积。
其中彩色部分为所求区域,我的思路是将彩色部分分成四部分,分别为左上,右上,左下,右下。四部分相加即可得到结果,其中粉色部分共加了两次,黑色部分共加了四次,因此要减去一次粉色部分再减去的过程中也减去了两次黑色部分,还要再减去一次黑色部分。
【答案】:26020201
【代码】:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = 1;
int m = sc.nextInt();//输入行列数
int a[][] = new int[120][120];//将数储存在二维数组中
for (int i = 1; i <= m; i++) {
for (int j = 1; j <= m; j++) {
a[i][j] = n;//赋值
n++;
}
}
int sum = 0;//求总和
/**左上部分求和**/
for (int i = 1; i <= (m + 1) / 2; i++)
for (int j = (m + 1) / 2; j > (m + 1) / 2 - i; j--)
sum += a[i][j];
/**右上部分求和**/
for (int i = 1; i <= (m + 1) / 2; i++)
for (int j = (m + 1) / 2; j <(m + 1) / 2 + i; j++)
sum += a[i][j];
/**左下部分求和**/
for (int i = (m + 1) / 2; i <= m; i++)
for (int j = i - (m + 1) / 2 + 1; j <= (m + 1) / 2; j++)
sum += a[i][j];
/**右下部分求和**/
int k = m;
for (int i = (m + 1) / 2; i <= m; i++) {
for (int j = (m + 1) / 2; j <= k; j++)
sum += a[i][j];
k--;
}
//求和时位于中点的两条线共加了两遍,因此要减去中间两条线的和
int sum1 = 0;
for (int i = 1; i <= m; i++)
sum1 += a[(m + 1) / 2][i] + a[i][(m + 1) / 2];
//矩阵最中间的点共加了4遍,减去的两条边中有两遍,因此要再减去一遍
System.out.println(sum - sum1 - a[(m + 1) / 2][(m + 1) / 2]);
}
}