Description
国际象棋的棋盘是黑白相间的8 * 8的方格,棋子放在格子中间。如下图所示:
王、后、车、象的走子规则如下:
王:横、直、斜都可以走,但每步限走一格。
后:横、直、斜都可以走,每步格数不受限制。
车:横、竖均可以走,不能斜走,格数不限。
象:只能斜走,格数不限。
写一个程序,给定起始位置和目标位置,计算王、后、车、象从起始位置走到目标位置所需的最少步数。
Input
第一行是测试数据的组数t(0≤t≤20)。以下每行是一组测试数据,每组包括棋盘上的两个位置,第一个是起始位置,第二个是目标位置。位置用“字母-数字”的形式表示,字母从“a”到“h”,数字从“1”到“8”。
Output
对输入的每组测试数据,输出王、后、车、象所需的最少步数。如果无法到达,就输出“Inf”。
Sample Input
2
a1 c3
f5 f8
Sample Output
2 1 2 1
3 1 1 Inf
#include<stdio.h>
#include<math.h>
int main(){
int n;
int i;
char a[5],b[5];
int x,y;
scanf("%d",&n);
for(i=1;i<=n;i++){
scanf("%s %s",&a,&b);
x=abs(a[0]-b[0]);
y=abs(a[1]-b[1]);
if(x==0 && y==0) printf("0 0 0 0\n");
else {
if(x>=y) printf("%d ",x);
else printf("%d ",y);
if(x==0 ||y==0 ||x==y) printf("1 ");
else printf("2 ");
if(x!=0 && y!=0) printf("2 ");
else printf("1 ");
if(abs(x-y)%2!=0) printf("Inf ");
else if(x==y) printf("1 ");
else printf("2 ");
printf("\n");
}
}
}
2:
#include<stdio.h>
#include<string.h>
#include<math.h>
int main(){
int T;
int b,d;
char a,c;
int n,m;
scanf("%d",&T);
while(T--){
scanf(" %c %d %c %d",&a,&b,&c,&d);
n=abs(a-c);
m=abs(b-d);
if(n==0 && m==0) printf("0 0 0 0\n");
else{
if(m>=n) printf("%d ",m);
else printf("%d ",n);
if(n==m || n==0 || m==0) printf("1 ");
else printf("2 ");
if(n==0 || m==0) printf("1 ");
else printf("2 ");
if((m-n)%2!=0) printf("Inf\n");
else if(n==m) printf("1\n");
else printf("2\n");
}
}
}
注意: if((m-n)%2!=0) printf("Inf\n");
else if(n==m) printf("1\n");
else printf("2\n");
最后一个的计算 (m-n)!=0 则Inf