Lonesome Knight
Time limit: 1.0 second
Memory limit: 64 MB
Memory limit: 64 MB
The statement of this problem is very simple: you are to determine how many squares of the chessboard can be attacked by a knight standing alone on the board. Recall that a knight moves two squares forward (horizontally or vertically in any direction) and then one square sideways (perpedicularly to the first direction).
Input
The first line contains the number
N of test cases, 1 ≤
N ≤ 100. Each of the following
N lines contains a test: two characters. The first character is a lowercase English letter from 'a' to 'h' and the second character is an integer from 1 to 8; they specify the rank and file of the square at which the knight is standing.
Output
Output
N lines. Each line should contain the number of the squares of the chessboard that are under attack by the knight.
Sample
input | output |
---|---|
3 a1 d4 g6 | 2 8 6 |
题意:下棋,棋盘的一维是从a~h的,另一维是1~8的,给定一个骑士的位置,问该骑士一步能有几个不同的走法。
解析:直接按照马走日的规则判断即可,注意边界判断。
AC代码:
#include <cstdio>
#include <iostream>
using namespace std;
int solve(int i, int j){
int ans = 0;
if(i - 1 >= 1){
ans += (j + 2 <= 8) + (j - 2 >= 1);
}
if(i + 2 <= 8){
ans += (j + 1 <= 8) + (j - 1 >= 1);
}
if(i + 1 <= 8){
ans += (j + 2 <= 8) + (j - 2 >= 1);
}
if(i - 2 >= 1){
ans += (j + 1 <= 8) + (j - 1 >= 1);
}
return ans;
}
int main(){
int n;
char x, y;
while(scanf("%d", &n)==1){
for(int i=0; i<n; i++){
cin>>x>>y;
printf("%d\n", solve(x - 'a' + 1, y - '0'));
}
}
return 0;
}
PS:骑士竟然跟马一样,也是走日的~~~