摆方格
时间限制:
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
-
//有点坑啊。。。
-
刚开始想错了。。想成了下面的了。找完规律已提交就错了。自己还找不到错误。。看了别人的博客才发现自己想的简单了
-
4 5 6 7 3 14 15 8 2 13 16 9 1 12 11 10
-
上面的是我开始想的。。。错的(WA)
-
#include<stdio.h> #include<string.h> #include<math.h> #define ll long long int main() { ll n,m,i,sum; while(scanf("%lld",&n)!=EOF) { sum=0; for(i=n-1;i>=0;i--) { sum+=n; n+=2*i; } printf("%lld\n",sum); } return 0; }
-
//正确思路是要找到最大的。。()
-
6 5 4 3 7 12 13 2 8 11 14 1 9 10 15 16
-
(AC)
-
#include<stdio.h> #include<string.h> int main() { long long n,m,i,j,k,sum; while(scanf("%lld",&n)!=EOF) { k=n*n; sum=0; for(i=1;i<n;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; }