UVA11494 Queen【水题】

The game of Chess has several pieces with curious movements. One of them is the Queen, which can move any number of squares in any direction: in the same line, in the same column or in any of the diagonals, as illustrated by the figure below (black dots represent positions the queen may reach in one move):
在这里插入图片描述
    The great Chess Master Kary Gasparov invented a new type of chess problem: given the position of a queen in an empty standard chess board (that is, an 8 × 8 board) how many moves are needed so that she reaches another given square in the board?
    Kary found the solution for some of those problems, but is having a difficult time to solve some others, and therefore he has asked that you write a program to solve this type of problem.
Input
The input contains several test cases. The only line of each test case contains four integers X1, Y1, X2 and Y2 (1 ≤ X1, Y1, X2, Y2 ≤ 8). The queen starts in the square with coordinates (X1, Y1), and must finish at the square with coordinates (X2, Y2). In the chessboard, columns are numbered from 1 to 8, from left ro right; lines are also numbered from 1 to 8, from top to bottom. The coordinates of a square in line X and column Y are (X, Y ).
    The end of input is indicated by a line containing four zeros, separated by spaces.
Output
For each test case in the input your program must print a single line, containing an integer, indicating the smallest number of moves needed for the queen to reach the new position.
Sample Input
4 4 6 2
3 5 3 5
5 5 4 3
0 0 0 0
Sample Output
1
0
2

问题链接UVA11494 Queen
问题简述:(略)
问题分析
    国际象棋中的后,可以走直线(包括横竖斜线),给定起始点和目标点,问需要走几步。
    假设起始点为a,目标点为b,若a与b相同则0步;a与b共线则1步;其他则2步。
程序说明:(略)
参考链接:(略)
题记:(略)

AC的C++语言程序如下:

/* UVA11494 Queen */

#include <bits/stdc++.h>

using namespace std;

int main()
{
    int x1, y1, x2, y2;
    while ( ~scanf("%d%d%d%d", &x1, &y1, &x2, &y2) && (x1 || y1 || x2 || y2) ) {
        if ( x1 == x2 && y1 == y2 )
            printf("0\n");
        else if( x1 == x2 || y1 == y2 || abs(x1 - x2) == abs(y1 - y2) )
            printf("1\n");
        else
            printf("2\n");
    }

    return 0;
}

猜你喜欢

转载自www.cnblogs.com/tigerisland45/p/10381518.html