nyoj 1087 摆方格

来源:互联网 发布:js enum 格式 编辑:程序博客网 时间:2024/04/29 14:42

摆方格

时间限制:1000 ms  |  内存限制:65535 KB
难度:2
描述

  给你一个n*n的方格,每个方格里的数必须连续摆放如  

 

,下图为不连续的,请输出从左上角到右下角的对角线上的最大和   

 

输入
输入包含多组测试数据。
每一行包括一个数据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=4 
9 10 15 16 
8 11 14 1
7 12 13 2
6 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);elseprintf("%lld\n",n*n*n-3*n*n/2+2*n);}return 0;}        


0 0