zoukankan      html  css  js  c++  java
  • 1657 Distance on Chessboard(简单计算题)

    描述
    国际象棋的棋盘是黑白相间的8 * 8的方格,棋子放在格子中间。如下图所示:

    王、后、车、象的走子规则如下:
    • 王:横、直、斜都可以走,但每步限走一格。
    • 后:横、直、斜都可以走,每步格数不受限制。
    • 车:横、竖均可以走,不能斜走,格数不限。
    • 象:只能斜走,格数不限。


    写一个程序,给定起始位置和目标位置,计算王、后、车、象从起始位置走到目标位置所需的最少步数。
    输入
    第一行是测试数据的组数t(0 <= t <= 20)。以下每行是一组测试数据,每组包括棋盘上的两个位置,第一个是起始位置,第二个是目标位置。位置用"字母-数字"的形式表示,字母从"a"到"h",数字从"1"到"8"。
    输出
    对输入的每组测试数据,输出王、后、车、象所需的最少步数。如果无法到达,就输出"Inf".
    样例输入
    2
    a1 c3
    f5 f8
    样例输出
    2 1 2 1
    3 1 1 Inf
     1 /*按照不同的规则从起始位置带目标位置至少需要多少步*/ 
     2 #include<stdio.h>
     3 #include<math.h>
     4 int abs(int x){
     5     return x>0?x:x*-1;
     6 }
     7 int main()
     8 {
     9     char sch,ech;
    10     int T,sx,sy,ex,ey,dx,dy;
    11     scanf("%d",&T);
    12     while(T--){
    13         scanf(" %c%d %c%d",&sch,&sy,&ech,&ey);
    14         sx=sch-'a'+1;
    15         ex=ech-'a'+1;
    16         
    17         if(sx==ex && sy==ey){
    18             printf("0 0 0 0
    ");
    19             continue;
    20         }
    21         dx=abs(sx-ex),dy=abs(sy-ey);
    22         printf("%d ",dx>dy?dx:dy);//
    23         if(sx==ex || sy==ey || dx==dy)//
    24         printf("1 ");
    25         else
    26         printf("2 ");
    27         if(sx==ex || sy==ey)//
    28         printf("1 ");
    29         else
    30         printf("2 ");
    31         if(abs(dx-dy)%2 != 0)//
    32         printf("Inf
    ");//是否为同奇同偶 
    33         else
    34         {
    35             if(dx==dy)
    36             printf("1
    ");
    37             else
    38             printf("2
    ");    
    39         }
    40     }
    41     return 0;
    42 }
  • 相关阅读:
    数据库内连接、外连接与自连接
    安装MySQL容易出现的问题
    安装MySQL时提示3306端口已被占用的解决方案
    Smoke Testing
    冒烟测试与BVT测试
    以操作系统的角度述说线程与进程
    Notepad++配置Python开发环境
    Notepad++使用教程
    Sublime Text 皮肤插件安装
    小狼毫输入法常用设置
  • 原文地址:https://www.cnblogs.com/wenzhixin/p/8428694.html
Copyright © 2011-2022 走看看