C++面試題之螺旋隊列

//螺旋隊列.cpp
// 21   22 ... ...
// 20   7   8   9   10
// 19   6   1   2   11
// 18   5   4   3   12
// 17  16   15  14  13
//看清以上數字排列的規律,設1點的座標是(0,0),X方向向右爲正,y方向向下爲正。例如,7的座標爲
//(-1,-1),2的座標爲(0,1),3的座標爲(1,1)。編程實現輸入任意一點座標(x,y),輸出所對應得
//數字。[芬蘭某著名通信設備公司2005年面試題]

#include<stdio.h>
#define max(a,b) ((a)<(b)?(b):(a))
#define abs(a) ((a)>0?(a):(-a))
int foo(int x,int y)
{
 int t=max(abs(x),abs(y));
 int u=t+t;
 int v=u-1;
 v=v*v+u;
 if(x==-t)  v+=u+t-y;
 else if(y==-t)
  v+=3*u+x-t;
 else if (y==t)
  v+=t-x;
 else
  v+=y-t;
 return v;
}

int main()
{
 int x,y;
 for(y=-4;y<=4;y++)
 {
  for(x=-4;x<=4;x++)
   printf("%5d",foo(x,y));
  printf("/n");
 }
 while(scanf("%d%d",&x,&y)==2)
  printf("%d/n",foo(x,y));
 return 0;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章