1 在一个平面上,问马每次从(0,0)走到(x,y)要转几次弯。马的走路方式如下图:
把每个转弯的点的坐标写出来,然后写出向上的线、向左的线、向下的线、向右的线上的点的坐标范围,会发现出规律,比如向上的线为x > 0且为固定的(可以用来计算转弯的次数),y<-x && y<=x。
注意每条线的第一个点为上一个线的终点,所以转弯数少一个,故上式左边没有取等号。
下面时AC了的代码:
#include<cstdio>
#include<cmath>
using namespace std;
int main(){
int x, y, re, ma;
while (scanf("%d%d", &x, &y) != EOF){
ma = 0;
if (!x && !y){
printf("0\n");
continue;
}
if (x > 0 && y > (-x) - 1 && y <= x) re = (x - 1) * 4 + 1;
if (y > 0 && x >= (-y) && x < y) re = y * 4 - 2;
if (x < 0 && y >= x && y < (-x)) re = (-x) * 4 - 1;
if (y <= 0 && x > y && x <= (-y) + 1) re = (-y) * 4;
printf("%d\n", re);
}
return 0;
}