给你一个从 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
那么当 nn 等于 101
101 的时候,矩阵和是多少?
#include<iostream>
using namespace std;
int a[105][105];
int main()
{
int ans=0;
int count=1;
int n=101;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
a[i][j]=count++;
}
}
// 左上
for(int i=1;i<=(n+1)/2;i++)
{
for(int j=(n+1)/2;j>(n+1)/2-i;j--)
{
ans+=a[i][j];
}
}
//右上
for(int i=1;i<=(n+1)/2;i++)
{
for(int j=(n+1)/2;j<(n+1)/2+i;j++)
{
ans+=a[i][j];
}
}
//左下
for(int i=(n+1)/2;i<=n;i++)
{
for(int j=i-(n+1)/2+1;j<=(n+1)/2;j++)
{
ans+=a[i][j];
}
}
//右下
int k=n;
for(int i=(n+1)/2;i<=n;i++)
{
for(int j=(n+1)/2;j<=k;j++)
{
ans+=a[i][j];
}
k--;
}
for(int i=1;i<=n;i++)
{
ans-=a[i][(n+1)/2];
ans-=a[(n+1)/2][i];
}
ans=ans-a[(n+1)/2][(n+1)/2];
cout<<ans<<endl;
}