poj1657---chessboard
对棋盘横纵坐标的解读
str1="f3"
str2="e9"
x=abs(str1[0]-str2[0])
y=abs(str1[1]-str1[1])
如果x==y,在一条斜线上
如果x==0或者y==0,在同一横行,或者同一列
注意:我们谈的是x个和y个单位,所以加绝对值
解题思路:找规律:
王:x和y中较大的那个值
后:两个位置如果在一条横线,一条竖线,一条斜线,输出1
否则,输出2,对于后,任意两个不在一条横线,一条竖线,一条斜线的的位置,两步必到
车:如果在同一竖,同一行,一步就到,无论在不在一条斜线上都两步必到
象:x+y能被2整除就能到达,否则输出Inf
在能到达的情况下,又分为走一步和走两步
走一步:x==y
走两步:直接else
#include <stdio.h> #include <stdlib.h> #include<math.h> int main() { int cases; char str1[3],str2[3]; scanf("%d",&cases); while(cases--) { int x,y; scanf("%s %s",str1,str2); x=abs(str1[0]-str2[0]); y=abs(str1[1]-str2[1]); if(x==0&&y==0){ printf("0 0 0 0\n"); continue; } //王 if(x>=y)//x=y,也就是两个位置在一条斜线上,无论输出x还是y都一样 printf("%d ",x); else printf("%d ",y); //后 if(x==0||y==0||x==y) printf("%d ",1); else printf("%d ",2); //车 if(x==0||y==0) printf("%d ",1); else printf("%d ",2); //象 if((x+y)%2==0) { if(x==y) printf("%d\n",1); else printf("%d\n",2); } else printf("Inf\n"); } return 0; }