zoukankan      html  css  js  c++  java
  • nyoj1087——摆格子——————【规律题】

    摆方格

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

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

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

     
    输入
    输入包含多组测试数据。
    每一行包括一个数据n,表示n*n的方格(保证所有数据在2^64范围内且n>0)
    输出
    每行输出占一行,输出最大的对角线之和。
    样例输入
    1
    2
    3
    样例输出
    1
    6
    19


    解题思路:n的平方那个数字不在顶角位置。对角线上n-1个数字与n的平方成等差数列,顶角最小的那个值由对角线一侧的空格数来推算,也是根据空格构成等差数列来求,当然要去掉那些穿插的较大的数的个数(n-1)/2。

    #include<stdio.h>
    #define LL long long
    int main(){
    
        LL n,a,b,ans;
        while(scanf("%lld",&n)!=EOF){
    
            a=n*(n-1)/2-(n-1)/2+1; //求顶角不构成等差数列那个数
            b=(n*n-(n-2))*(n-1); //对角线构成等差数列的和
            ans=a+b;
            printf("%lld
    ",ans);
        }
        return 0;
    }
    

      

    以n=4为例。对角线上,16的位置不是在右上角,而是留了一个顶角位置,12、14、16构成了等差数列。6可以由对角线左侧的空格个数来求得,即n*(n-1)/2为对角线左侧的空格个数,而由于会有13等较大的数的穿插,所以(n-1)/2即为所穿插的较大数的个数(可以写几组找下规律)。

  • 相关阅读:
    工厂方法模式
    单例模式
    .NET平台下几种SOCKET模型的简要性能供参考
    easy ui 教程
    ACCESS数据库改名asp或asa
    库函数strcpy/strlen的工作方式
    opencv cvPreCornerDetect
    BlobTracker
    图像处理 Mine
    几种常见模式识别算法整理和总结
  • 原文地址:https://www.cnblogs.com/chengsheng/p/4384154.html
Copyright © 2011-2022 走看看