原题链接传送门
题目描述:
给你一个从 n×n 的矩阵,里面填充 11 到 n×n 。例如当 n 等于 3 的时候,填充的矩阵如下。
1 2 3
4 5 6
7 8 9
现在我们把矩阵中的每条边的中点连起来,这样形成了一个新的矩形,请你计算一下这个新的矩形的覆盖的数字的和。比如,n=3 的时候矩形覆盖的数字如下。
2
4 5 6
8
那么当 n 等于 101 的时候,矩阵和是多少?
这里取各边中点连接后是个正方形。
根据数学上对称性可以知道在第i行(i<=50)矩形覆盖的数值之和为
[51 + (101 * (i-1) )] * (2 * i - 1)
//第i行中间值 //第i行有(2*i-1)个中间值
而第 i 行与第101 - i
行相对应,相加后有 (2 * i - 1) * 2个mid(最中间值)
将 mid 值个数 count 数与 mid 相乘即为覆盖数值之和
#include <bits/stdc++.h>
using namespace std;
int main(){
int sum;
int n = 101;
int mid = 51+101*50; //矩形正中间值
int count = 0; //计算共有多少个 mid 值
for(int i=1;i<=50;i++){
count += (2*i-1)*2; //除中间行外 count 数
}
count += (2*51 - 1); //加中间行后 count 数
sum = mid * count; //所有 count * mid中值即为矩形覆盖数值之和
printf("%d\n",sum);
return 0;
}
运行结果:26020201