摆方格
时间限制:
1000 ms | 内存限制:
65535 KB
难度:2
-
描述
-
给你一个n*n的方格,每个方格里的数必须连续摆放如
1
2
4
3
,下图为不连续的,请输出从左上角到右下角的对角线上的最大和
1
3
4
2
-
输入
-
输入包含多组测试数据。
每一行包括一个数据n,表示n*n的方格(保证所有数据在2^64范围内且n>0)
输出
- 每行输出占一行,输出最大的对角线之和。 样例输入
-
1
-
2
-
3
样例输出
-
1
-
6
-
19
-
多画几组,找规律!
-
n=1
-
1
-
n=2
-
输入包含多组测试数据。
-
2 1
-
3 4 //4 2
-
n=3
-
3 2 1
-
4 7 8
-
5 6 9 //9 7 3(7/2)
-
-
n=49 10 15 168 11 14 17 12 13 26 5 4 3 // 16 14 12 6(12/2)
-
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)
-
规律:等差k-1项+最后一项/2
-
代码:
-
下面是个等差公式推出来的:#include<stdio.h> #include<string.h> #define N 1100 //int a[N]; int main() { long long n; while(scanf("%lld",&n)!=EOF) { long long i,j,k; k=n*n; long long sum=0; for(i=0;i<n-1;i++) { sum+=k; k-=2; } k/=2; sum+=k; printf("%lld\n",sum+1); } return 0; }
-
#include<stdio.h> int main() { long long n; while(scanf("%lld",&n)!=EOF) { if(n&1) printf("%lld\n",n*n*n-3*n*n/2+2*n-1); else printf("%lld\n",n*n*n-3*n*n/2+2*n); } return 0; }