题目出的还是可以,题面读的懂,题意比较清楚,练一下板子题比较舒服
就是自己太菜了QAQorz
/**B**/
给你一个n*n矩阵,按照顺序填入1到n*n的数,例如n=5,该矩阵如下
|
1 |
2 |
3 |
4 |
5 |
|
6 |
7 |
8 |
9 |
10 |
|
11 |
12 |
13 |
14 |
15 |
|
16 |
17 |
18 |
19 |
20 |
|
21 |
22 |
23 |
24 |
25 |
现在让你连接相邻两条边的中点,然后只保留他们围成封闭图形区域的数字,那么这个矩阵变为
|
|
|
3 |
|
|
|
|
7 |
8 |
9 |
|
|
11 |
12 |
13 |
14 |
15 |
|
|
17 |
18 |
19 |
|
|
|
|
23 |
|
|
现在你们涵哥让你求变化后的矩阵的所有元素的和为多少
矩阵求和,直接推公式,一个小技巧就是直接用一个数字代表值,而不用开二维数组来存这个矩阵
#include<cstdio> #include<algorithm> #include<iostream> #include<string.h> using namespace std; int main() { int N; int T; scanf("%d",&T); while(T--){ scanf("%d",&N); int m=N/2; long long sum=0; int k=1; int t=1; for(int i=0;i<N;i++){ for(int j=0;j<N;j++){ int x=i; int y=j; int p1=-1*i+m; int p2=i-m; int p3=i+m; int p4=-1*i+3*m; if(y>=p1&&y>=p2&&y<=p3&&y<=p4){ sum+=t; } t++; } } printf("%lld\n",sum); } return 0; }