//关于国际象棋这个题目 出题人简直丧尽天良,居然有不走这个情况
//本题代码如下,可以ac
#include<bits/stdc++.h>
#include<stdlib.h>
using namespace std;
typedef struct node{
int num0;
int num1;
int num2;
string num3;
}node;
//int abs(int)
int max(int a,int b)
{
return a>b?a:b;
}
int main()
{
node p[30];
int n=0;
int count=0;
string a[30],b[30];
cin>>n;
for(int i=0;i<n;i++)
{
cin>>a[i]>>b[i];
char temp0=a[i].at(0);
char temp1=a[i].at(1);
char temp2=b[i].at(0);
char temp3=b[i].at(1);
int res0=temp0-temp2;
int res1=temp1-temp3;
res0=abs(res0);
res1=abs(res1);
if(res0==res1)
{
p[count].num0=res0;
}
else if(res0==0)
{
p[count].num0=res1;
}
else if(res1==0)
{
p[count].num0=res0;
}
else{
int sum=0;
//sum+=res0;
sum=max(res0,res1);
p[count].num0=sum;
}
//后
if((res0==res1&&res0!=0)||(res0==0&&res1!=0)||(res1==0&&res0!=0))
{
p[count].num1=1;
}
else if(res0==0&&res0==0)
{
p[count].num1=0;
}
else{
p[count].num1=2;
}
//车
if(res0==0&&res1==0)
{
p[count].num2=0;
}
else if((res0==0&&res1!=0)||(res1==0&&res0!=0))
{
p[count].num2=1;
}
else{
p[count].num2=2;
}
//xiang
if(res0==0&&res1==0)
{
p[count].num3="0";
}
else if(res0==res1&&res0!=0)
{
p[count].num3="1";
}
else if(res0%2==0&&res1%2==0)
{
p[count].num3="2";
}
else{
p[count].num3="Inf";
}
count++;
}
for(int i=0;i<count;i++)
{
if(i!=count-1)
cout<<p[i].num0<<" "<<p[i].num1<<" "<<p[i].num2<<" "<<p[i].num3<<endl;
else{
cout<<p[i].num0<<" "<<p[i].num1<<" "<<p[i].num2<<" "<<p[i].num3;
}
}
}
02:Distance on Chessboard
总时间限制:
1000ms
内存限制:
65536kB
描述
国际象棋的棋盘是黑白相间的8 * 8的方格,棋子放在格子中间。如下图所示:
王、后、车、象的走子规则如下:
- 王:横、直、斜都可以走,但每步限走一格。
- 后:横、直、斜都可以走,每步格数不受限制。
- 车:横、竖均可以走,不能斜走,格数不限。
- 象:只能斜走,格数不限。
写一个程序,给定起始位置和目标位置,计算王、后、车、象从起始位置走到目标位置所需的最少步数。
输入
第一行是测试数据的组数t(0 <= t <= 20)。以下每行是一组测试数据,每组包括棋盘上的两个位置,第一个是起始位置,第二个是目标位置。位置用"字母-数字"的形式表示,字母从"a"到"h",数字从"1"到"8"。
输出
对输入的每组测试数据,输出王、后、车、象所需的最少步数。如果无法到达,就输出"Inf".
样例输入
2 a1 c3 f5 f8
样例输出
2 1 2 1 3 1 1 Inf