问题
分析
找规律,或者建坐标系
这道题主要是建坐标系,给每个中心点定下坐标
参考:https://blog.csdn.net/xiao_k666/article/details/82024321
#include <cstdio>
#include <cstring>
#include <iostream>
#include <cmath>
#include <vector>
#include <utility>
#include <list>
#include <algorithm>
using namespace std;
typedef long long ll;
const int maxn=20000+5;
int pos[maxn][2],a,b,r;
int dx[]={1,0,-1,-1,0,1,1},dy[]={-1,-1,0,1,1,0,0};
inline void move(int dir,int step){
while(step--) {
pos[r + 1][0] = pos[r][0] + dx[dir];
pos[r + 1][1] = pos[r][1] + dy[dir];
++r;
}
}
void init(){
r=2;
pos[2][0]=1,pos[2][1]=0;
for(int i=0;i<58;++i){
move(0,i);
for(int j=1;j<5;++j)
move(j,i+1);
move(5,i+2);
}
}
int main(void){
init();
while(scanf("%d%d",&a,&b)==2 && (a||b)){
int ans=0;
int x=pos[a][0]-pos[b][0],y=pos[a][1]-pos[b][1];
if((x<0 && y>0) || (x>0 && y<0)) ans=max(abs(x),abs(y)); //向量在二四象限内是横纵最大值
else ans=abs(x)+abs(y); //向量在一三象限内是横纵坐标相加
printf("The distance between cells %d and %d is %d.\n",a,b,ans);
}
}