摆方格
题目描述
给你一个n*n的方格,每个方格里的数必须连续摆放如下:
1 | 2 |
4 | 3 |
下图为不连续的,请输出从左上角到右下角的对角线上的最大和
1 | 3 |
4 | 2 |
输入
输入包含多组测试数据。
每一行包括一个数据n,表示n*n的方格(保证所有数据在2^64范围内且n>0)
每一行包括一个数据n,表示n*n的方格(保证所有数据在2^64范围内且n>0)
输出
每行输出占一行,输出最大的对角线之和。
样例输入
1
2
3
样例输出
1
6
19
来源
虽然在南阳里分类是贪心,但是其实就是找规律。
n=1
1
n=2
2 1
3 4
1
n=2
2 1
3 4
结果:[
4 + 2]
n=3
3 2 1
4 7 8
5 6 9
n=3
3 2 1
4 7 8
5 6 9
结果:[9+ 7+ 3(7/2)]
n=4
9 10 15 16
8 11 14 1
7 12 13 2
6 5 4 3
n=4
9 10 15 16
8 11 14 1
7 12 13 2
6 5 4 3
结果:[16+ 14 +12 +6(12/2)]
n=5
15 16 17 18 19
14 13 22 21 20
11 12 23 2 1
10 25 24 3 4
9 8 7 6 5
n=5
15 16 17 18 19
14 13 22 21 20
11 12 23 2 1
10 25 24 3 4
9 8 7 6 5
结果:[ 25+ 23 + 21 + 19 +9(19/2)]
#include<stdio.h>
int main(){
long long n;
while(scanf("%lld",&n)!=EOF){
long long m=n*n;
long long sum=0;
for(long long i=0;i<n-1;i++){
sum+=m;
m-=2;
}
sum+=m/2;
//由于多减了2,所以结果要加一
printf("%lld\n",sum+1);
}
}