题目
中国象棋是起源于中国的一种棋类游戏,属于二人对抗性游戏的一种,在中国有着悠久的历史。由于用具简单、趣味性强,成为流行极为广泛的棋艺活动。
请你计算一下,马走一步之内可以到达的位置。
说明
马走动的方法是一直一斜,即先横着或竖着走一格,然后再斜着走一个对角线,俗称“马走日”。马走一次可以达到四周的八个点,故有“八面威风”之说。如果在要去的方向有别的棋子挡住,马就无法走过去,俗称“蹩马腿”。为了简化题目,这里就没有蹩马腿这回事了。
输入格式
第一行输入两个整数n(1≤n≤100),m(1≤m≤100)代表棋盘行数和列数。
第二行输入两个整数x(1≤x≤n),y(1≤y≤m)代表马的初始位置。
输出格式
输出整个棋盘,"."代表棋盘上可以落子的点,"#"代表马走一步能到达的点。
样例
样例输入
10 9
10 1
样例输出
.........
.........
.........
.........
.........
.........
.........
.#.......
..#......
#........
程序
#include<bits/stdc++.h>
using namespace std;
int main(){
int h, w, x, y;
cin >> h >> w >> x >> y;
int dx[] = {2, 2, -2, -2, 1, -1, 1, -1};
int dy[] = {-1, 1, -1, 1, 2, 2, -2, -2};
int could[9][2] = {}, a = 1;
x --;
y --;
could[0][0] = x;
could[0][1] = y;
for(int i = 0;i < 8;i ++){
int p = x + dx[i], q = y + dy[i];
if(p >= 0 && q >= 0 && p < h && q < w){
could[a][0] = p;
could[a][1] = q;
a ++;
}
}for(int i = 0;i < h;i ++){
for(int j = 0;j < w;j ++){
bool flag = true;
for(int k = 0;k < a;k ++){
if(i == could[k][0] && j == could[k][1]){
flag = false;
break;
}
}if(flag){
cout << ".";
}
else{
cout << "#";
}
}cout << endl;
}
return 0;
}