Ural 1197 - Lonesome Knight

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

Problem Author: folklore Problem Source: Fifth High School Children Programming Contest, Ekaterinburg, March 02, 2002
// Ural Problem 1197. Lonesome Knight

// Verdict: Accepted  

// Submission Date: 10:31:16 14 Jan 2014

// Run Time: 0.015s

//  

// 版权所有(C)acutus。(mail: [email protected]) 

// 博客:http://www.cnblogs.com/acutus/

// [解题方法]  

// 简单题,直接按题意判断即可



#include<stdio.h>



int countNumber(int i, int j)

{

    int count = 0;

    if((i - 1) >= 1) {

        if((j - 2) >= 1) count++;

        if((j + 2) <= 8) count++;

    }

    if((i - 2) >= 1) {

        if((j - 1) >= 1) count++;

        if((j + 1) <= 8) count++;

    }

    if((i + 1) <= 8) {

        if((j - 2) >= 1) count++;

        if((j + 2) <= 8) count++;

    }

    if((i + 2) <= 8) {

        if((j - 1) >= 1) count++;

        if((j + 1) <= 8) count++;

    }

    return count;

}



void solve()

{

    int N, n;

    char c;

    scanf("%d", &N);

    getchar();

    while(N--) {

        scanf("%c%d", &c, &n);

        getchar();

        printf("%d\n",countNumber(c - 'a' + 1, n));

    }

}



int main()

{

    solve();

    return 0;

}

 

你可能感兴趣的:(one)