POJ 2265 Bee Maja (找规律)

题目链接

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

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

 

POJ 2265 Bee Maja (找规律)

 1 #include <cstdio>

 2 #include <cstring>

 3 #include <iostream>

 4 #include <cstdlib>

 5 

 6 using namespace std ;

 7 

 8 int main()

 9 {

10     int a ;

11     while(scanf("%d",&a) !=EOF)

12     {

13         if(a == 1)

14         {

15             printf("0 0\n") ;

16             continue ;

17         }

18         int n = 0;

19         while(3 * (n-1) * n + 1 < a)//3 * (n-1) * n + 1表示第n圈的最后一个数是多少

20             n++;//找到该数属于第几圈

21         n--;

22         a -= 3*(n-1)*n+1;

23         int x , y;

24         //分为6个边,每个边上n个数,可以根据题目里的两个图找找规律,看看每条边上的xy的规律是多少

25         if(a<=n)

26         {

27             x = n-a;

28             y = a;

29         }

30         else if(a>n&&a<=2*n)

31         {

32             x = n-a;

33             y = n;

34         }

35         else if(a>2*n&&a<=3*n)

36         {

37             x = -n;

38             y = 3*n-a;

39         }

40         else if(a>3*n&&a<=4*n)

41         {

42             x = a-4*n;

43             y = 3*n-a;

44         }

45         else if(a>4*n&&a<=5*n)

46         {

47             x = a-4*n;

48             y = -n;

49         }

50         else

51         {

52             x = n;

53             y = a-6*n;

54         }

55         printf("%d %d\n",x,y) ;

56     }

57     return 0 ;

58 }
View Code

 

你可能感兴趣的:(poj)