题意 : 给你两个蜂巢的编号,给你一个的编号让你输出在另外一个蜂巢中对应的编号。
思路 : 先将蜂巢分层,第一层一个数,第二层6个数,第三层12个数…………然后用公式表示出第n层的最后一个数是多少,下图中竖着的是x坐标,斜着的是y坐标,往左横坐标+1,往右横坐标-1,以斜线为准往上纵坐标-1,往下纵坐标+1,(1,1)也就是18是第三圈的第一个数,(2,1)也就是20是第四圈的第一个数。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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 }