计蒜客 2018蓝桥杯省赛 B组模拟赛(五) A题 矩阵求和(java)

【题目链接】: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 scanner = new Scanner(System.in);
        int n = 1;
        int m = scanner.nextInt();
        int[][] arr = new int[120][120];
        for(int i=1;i<=m;i++){
        	for(int j=1;j<=m;j++){
        		arr[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--){//3, 3 2, 3 2 1
        		sum+=arr[i][j];
        	}
        }
        /* 右上部份求和 */
        for(int i=1;i<=(m+1)/2;i++){
        	for(int j=(m+1)/2;j<(m+1)/2+i;j++){//3, 3 4, 3 4 5
        		sum+=arr[i][j];
        	}
        }
        /* 左下部分求和 */
        for(int i=(m+1)/2;i<=m;i++){
        	for(int j=i-(m+1)/2+1;j<=(m+1)/2;j++){//1, 1 2, 1 2 3
        		sum+=arr[i][j];
        	}
        }
        int k=m;
        /* 右下部分求和 */
        for(int i=(m+1)/2;i<=m;i++){
        	for(int j=(m+1)/2;j<=k;j++){//3, 3 4, 3 4 5
        		sum+=arr[i][j];
        	}
        	k--;
        }
        /* 求和时位于中点的两条线共加了两遍,因此要减去中间两条线的和 */
        int sum1 = 0;
        for(int i=1;i<=m;i++){
        	sum1+=arr[(m+1)/2][i]+arr[i][(m+1)/2];
        }
        /* 矩阵最中间的点共加了4遍,减去的两条边中有两遍,因此再减去一遍 */
        System.out.println(sum-sum1-arr[(m+1)/2][(m+1)/2]);
    }
}


来自于:https://blog.csdn.net/mcp3128/article/details/79695030


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值