• 2016


    Description

    In mathematics, a polygonal number is a number represented as dots or pebbles arranged in the shape of a regular polygon. The dots are thought of as alphas (units). These are one type of 2-dimensional figurate numbers. The following picture shows how triangular numbers, square numbers, pentagonal numbers and hexagonal numbers represented as dots arranged in the shape of corresponding regular polygon.

    Polygonal Numbers: Triangular, Square, Pentagonal and Hexagonal numbers

    2016 is not only a leap year but also a triangular and hexagonal year. If you are patient enough, you can count the number of the dots in the left triangle or in the right hexagon in the following picture. The number of dots in each shape is 2016.

    2016 is a triangular-hexagonal-leap year

    Therefore, 2016 is a triangular-hexagonal-leap year. The previous triangular-hexagonal-leap year is 1540 and the next is 2556. So living to see 2016 is very rare experience.

    You task is to list the triangular-hexagonal-leap years from 2016 to 990528. 990528 is also a triangular-hexagonal-leap year.

    Input

    This problem has no input.

    Output

    Please print each triangular-hexagonal-leap year in increasing order.

    For example, if you are asked to list the triangular-hexagonal-leap years from 780 to 2556, the output should be:

     780
    1128
    1540
    2016
    2556
    

    Sample Output

    2016
    
    2556
    
    ...  <-- some lines are skipped
    
    990528
    
    题意:给出三四五六边型数定义,然后让你输出指定范围的三六边型和闰年数;
    
    解题思路:这题主要是时间限制问题和怎么判断是否是三六边型数难办,开始的时候李远飞大师(忍住不笑)暴力打表但是神之WA了,后来我把方程解出来,比如判断三角形数:令x=[n*(n+1)]/2;解出来n=(1+sqrt(1+8*i))/2.0;只需要判断n是否为整数就可以了;上学期第一套提有一个类似解方程的题,哎~天才的记忆力,嘻嘻嘻^.^;
    
     感悟:长时间的沉淀,一瞬间的灵光一闪~~~
    
     代码:
    
     #include 
    #include
    #include
    using namespace std;
    bool leap(int i)
    {
        if((i%4==0&&i0!=0)||(i%4==0&&i@0==0))
            return true;
        return false;
    }
    bool check(int i)
    {
        double a,b;
        a=(1+sqrt(1+8*i))/2.0;
        b=(1+sqrt(1+8*i))/4.0;
        if(a-(int) a<1e-6&&b-(int) b<1e-6&&leap(i))//是不是整数
            return true ;
        return false;
    }
    int main()
    {
        for(int i=2016;i<=990528;i++)
            if(check(i))
            printf("%d ",i);
    }
  • 相关阅读:
    IDEA修改git账号及密码的方法
    深入浅出数据库索引原理
    切勿用普通for循环遍历LinkedList
    在Jquery里格式化Date日期时间数据
    Java 根据年月日精确计算年龄
    jquery判断页面元素是否存在
    js中 '枚举' 的使用
    springMVC怎么接受前台传过来的多种类型参数?(集合、实体、单个参数)
    jquery批量绑定click事件
    springMVC怎么接收日期类型的参数?
  • 原文地址:https://www.cnblogs.com/wuwangchuxin0924/p/5781558.html
Copyright © 2020-2023  润新知