题意是给定一个棋盘上的起始位置和终止位置,分别判断王、后、车、象从起始位置到达终止位置需要的步数。
简单的模拟加贪心。
假设起点距离终点的水平与竖直分量为x y。
贪心:
王:到达目标点处的的步数是x y中大的一个。
后:若点在一条直线上或对角线上,直接一步到达;若点不在一条直线上,则另需一步调整,共两步。
车:若点在一条直线上,一步到达;若不在一条直线上,因为步数不变,所以两步。
象:象的判断比较麻烦,若象要到达的位置颜色相反,则不能到达;若在对角线,则一步到达;其他情况,需要一步调整,即两步。
debug:起点为终点的情况
代码:
#include<stdio.h>
#include<math.h>
int main()
{
char begin[5], end[5];
int n;
scanf("%d",&n);
while(n--)
{
scanf("%s %s", begin, end);
int x, y;
x = abs(begin[0] - end[0]);
y = abs(begin[1] - end[1]);
if(x == 0 && y == 0)
printf("0 0 0 0\n");//debug
else
{
//王
if(x<y)
printf("%d ",y);
else
printf("%d ",x);
//后
if(x == y || x == 0 || y==0)
printf("1 ");
else
printf("2 ");
//车
if(x == 0 || y == 0)
printf("1 ");
else
printf("2 ");
//象
if(abs(x-y) % 2 != 0)
printf("Inf\n");
else if(x == y)
printf("1\n");
else
printf("2\n");
}
}
return 0;
}