📄 luoxuan.cpp
字号:
//螺旋队列.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 <iostream>
#include <cmath>
#include <iomanip>
using namespace std;
#define max(a,b) abs(a)<abs(b) ? abs(b): abs(a);
int foo(int x,int y)
{
int t=max(x,y);
int u=t*2;
int v=u-1;
v=v*v+u;
if(x==-t) //与顺序无关t=1时 左侧 5 6 7
v+=u+t-y;
else if(y==-t) // 上侧 7 8 9 (-1,-1) 时有7
v+=3*u+x-t;
else if(y==t) // 下侧 3 4 5 (-1,1) 时有5
v+=t-x;
else // 右侧 2 3 (1,1) 时有3
v+=y-t;
return v;
}
void main()
{
int n=4;
for(int y=-n;y<=n;y++)
{
for(int x=-n;x<=n;x++)
cout<<setw(4)<<foo(x,y);
cout<<endl;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -