首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ZOJ 3935 2016

ZOJ 3935 2016

作者头像
ShenduCC
发布2018-04-26 16:08:44
4300
发布2018-04-26 16:08:44
举报
文章被收录于专栏:算法修养算法修养

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

#include <iostream>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <algorithm>
#include <math.h>
#include <queue>

using namespace std;
int a[10005];
int b[10005];
int judge(int x)
{
    if(x%4==0&&x%100!=0||x%400==0)
        return 1;
    else
        return 0;
}
int main()
{
    for(int i=1;i<=10000;i++)
    {

            a[i]=(i*(i+1))/2;
    }
    for(int i=1;i<=10000;i++)
    {

            b[i]=i*(2*i-1);
    }
    int k=0;
    for(int i=63;i<=10000;i++)
    {
         for(int j=32;j<=10000;j++)
         {
             if(a[i]==b[j]&&judge(a[i]))
             {

                 printf("%d\n",a[i]);
                 if(a[i]==990528)
                     k=1;
                 break;
             }

         }
         if(k)
             break;
    }
    return 0;
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016-04-16 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档