给你一个从 n \times nn×n 的矩阵,里面填充 11 到 n \times nn×n 。例如当 nn 等于 33 的时候,填充的矩阵如下。
1
1 2 3
2
4 5 6
3
7 8 9
现在我们把矩阵中的每条边的中点连起来,这样形成了一个新的矩形,请你计算一下这个新的矩形的覆盖的数字的和。比如,n = 3n=3 的时候矩形覆盖的数字如下。
1
2
2
4 5 6
3
8
解题思路:找规律,对于中间行开始,向上数字的个数递减二个,向下的数字递减二个。
向上的数字最左边是51-i+1(i表示行),最右边是101-(51-i)
向下的数字最左边是i-51+1,最右边是101-(i-51)
package 矩阵求和;
import java.util.Scanner;
public class Main {
/**
* 找规律
*
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int n;
// Scanner in=new Scanner(System.in);
n=101;
int t=1;
int num[][]=new int[n+1][n+1];
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
num[i][j]=t;
t++;
}
}
int sum=0;
//计算中间行的和
for(int i=1;i<=101;i++){
sum+=num[51][i];
}
System.out.println(sum);
//计算上半部分的和
for(int i=50;i>=1;i--){
for(int j=51-i+1;j<=101-(51-i);j++){
sum+=num[i][j];
}
}
System.out.println(sum);
//计算下半部分的和
for(int i=52;i<=101;i++){
for(int j=i-51+1;j<=101-(i-51);j++){
sum+=num[i][j];
}
}
System.out.println(sum);
}
}