POJ 2265 Bee Maja (找规律)

时间:2022-09-09 07:22:24

题目链接

题意 : 给你两个蜂巢的编号,给你一个的编号让你输出在另外一个蜂巢中对应的编号。

思路 : 先将蜂巢分层,第一层一个数,第二层6个数,第三层12个数…………然后用公式表示出第n层的最后一个数是多少,下图中竖着的是x坐标,斜着的是y坐标,往左横坐标+1,往右横坐标-1,以斜线为准往上纵坐标-1,往下纵坐标+1,(1,1)也就是18是第三圈的第一个数,(2,1)也就是20是第四圈的第一个数。

POJ 2265 Bee Maja (找规律)

 #include <cstdio>
#include <cstring>
#include <iostream>
#include <cstdlib> using namespace std ; int main()
{
int a ;
while(scanf("%d",&a) !=EOF)
{
if(a == )
{
printf("0 0\n") ;
continue ;
}
int n = ;
while( * (n-) * n + < a)//3 * (n-1) * n + 1表示第n圈的最后一个数是多少
n++;//找到该数属于第几圈
n--;
a -= *(n-)*n+;
int x , y;
//分为6个边,每个边上n个数,可以根据题目里的两个图找找规律,看看每条边上的xy的规律是多少
if(a<=n)
{
x = n-a;
y = a;
}
else if(a>n&&a<=*n)
{
x = n-a;
y = n;
}
else if(a>*n&&a<=*n)
{
x = -n;
y = *n-a;
}
else if(a>*n&&a<=*n)
{
x = a-*n;
y = *n-a;
}
else if(a>*n&&a<=*n)
{
x = a-*n;
y = -n;
}
else
{
x = n;
y = a-*n;
}
printf("%d %d\n",x,y) ;
}
return ;
}