第二十四场周赛总结
作者:
cheems
,
2021-11-06 23:12:19
,
所有人可见
,
阅读 259
第二题
马控制区一定要注意边界问题啊
//地图越界总是会引起莫名其妙的问题
#include<iostream>
using namespace std;
int map[8][8];//棋盘
int mx,my;
int chex,chey;
char ma1[3];
char che[3];
//马走法
int dx[8]={-1, 1, -2, 2, -2, 2, -1, 1};
int dy[8]={-2, -2, -1, -1, 1, 1, 2, 2};
int res=0;//答案
int main()
{
cin>>che;//车
cin>>ma1;//马
chex=che[0]-'a';
chey=che[1]-'1';
mx=ma1[0]-'a';
my=ma1[1]-'1';
map[mx][my]=2;//马为2
map[chex][chey]=1;//车为1
//马控制区
for(int i=0;i<8;i++)
{
if(mx+dx[i]>=0&&mx+dx[i]<8&&my+dy[i]>=0&&my+dy[i]<8)//越界赋值,会出问题
map[mx+dx[i]][my+dy[i]]=2;
}
//车控制区
for(int i=0;i<8;i++)map[chex][i]=1;
for(int i=0;i<8;i++)map[i][chey]=1;
for(int i=0;i<8;i++)
{
for(int j=0;j<8;j++)
{
//不与车和马重复,不进入攻击区
if((i==mx&&j==my)||(i==chex&&j==chey))continue;
//if(i==chex&&j==chey)continue;
if(map[i][j]==1||map[i][j]==2) continue;
int flag=true;
for(int k=0;k<8;k++)//不能攻击到
{
if(i+dx[k]==mx&&j+dy[k]==my || i+dx[k]==chex&&j+dy[k]==chey){flag=false;break;}
}
if(flag)
res++;
}
}
printf("%d",res);
return 0;
}