您的位置:首页 > 其它

ZOJ 2016 3935

2016-04-19 18:05 155 查看
ZOJ Problem Set - 3935
2016
Time Limit: 2 Seconds     
Memory Limit: 65536 KB
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.



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.

 

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


//题意:

让你找出在【2016---990528】之间的满足以下三个条件的所有的数y;

条件1、这个数是闰年;

条件2、满足组成三角形的条件:n*(n+1)/2=y;

条件3、满足组成六边形的条件:m*(2*m-1)/2=y;

通过求解上面的两个方程可以得到x3=(-1+-sqrt(1+8*y))/2;

                                                     x6=(1+=sqrt(1+8*y))/4;

由这两个公式可以推出结果

#include<stdio.h>
#include<string.h>
#include<math.h>
#include<algorithm>
using namespace std;
bool year(int y)
{
if(y%4==0&&y%100!=0||y%400==0)
return true;
return false;
}
int main()
{
for(int i=2016;i<=990528;i+=4)
{
if(!year(i)) continue;
int s=sqrt(1.0+8*i);
if(s*s!=1+8*i) continue;
if((s-1)%2) continue;//判断能否组成三角形
if((s+1)%4) continue;//判断能否组成六边形
printf("%d\n",i);
}
return 0;
}


 

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: