用一个t数组记录该位置是否满足条件
先判断马的攻击范围和车的攻击范围
在再判断后来放置的一个马能否攻击原来的车(马不用考虑,因为马是互相攻击的)
直接上代码……
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
string sa,sb;
bool t[9][9];
int ans;
int f1(char a)
{
return a-'a'+1;
}
int f2(char a)
{
return a-'0';
}
int dx[12] = {-2, -1, 1, 2, 2, 1, -1, -2,-1,0,1,0};
int dy[12] = {1, 2, 2, 1, -1, -2, -2, -1,0,1,0,-1};
int main()
{
cin>>sa>>sb;
int t1=f1(sa[0]),t2=f2(sa[1]),t3=f1(sb[0]),t4=f2(sb[1]);
for(int i=1;i<=8;i++)
for(int j=1;j<=8;j++)
t[i][j]=0;
t[t1][t2]=t[t3][t4]=1;
for(int i=0;i<8;i++)
{
int xx=t3+dx[i],yy=t4+dy[i];
if(xx<1||xx>8||yy<1||yy>8) continue;
t[xx][yy]=1;
}
for(int i=0;i<8;i++)
{
int xx=t1+dx[i],yy=t2+dy[i];
if(xx<1||xx>8||yy<1||yy>8) continue;
t[xx][yy]=1;
}
for(int i=1;i<=8;i++)
for(int j=1;j<=8;j++)
if(i==t1||j==t2)
t[i][j]=1;
// for(int i=1;i<=8;i++)
// {
// for(int j=1;j<=8;j++) cout<<t[i][j]<<' ';
// cout<<endl;
// }
for(int i=1;i<=8;i++)
for(int j=1;j<=8;j++)
{
if(t[i][j]==0) ans++;
}
cout << ans;
}
第二个和第三个for循环什么意思
第二个指马的攻击范围的位置的排除
第三个指车的攻击范围的位置的排除
dx和dy是8方向日字偏移量