A编程题--马走日

2020年1月17日 1589点热度 0人点赞 0条评论

A编程题--马走日

时间: 1ms        内存:128M

描述:

小平最近迷上了下象棋,尤其对棋子马的规则很有兴趣。马走动的方法是一直一斜,即先横着或竖着走一格,然后再斜着走一个对角线,俗称 " 马走日 " ,如图1所示。但是如果在马要去的方向正前方有别的棋子挡住,马就无法走过去,俗称 " 蹩马腿 ",如图2所示。象棋高手大盛给小平画了一张马行走的方法如图3所示,如果A有棋子,则马不能走到位置1和位置2;如果B有棋子,则马不能走到位置3和位置4;如果C有棋子,则马不能走到位置5和位置6;如果D有棋子,则马不能走到位置7和位置8。如果1至8是己方的棋子,马也不能走;如果是敌方棋子,则马可以走到对方的位置并吃掉对方;如果敌方是将或帅,则称为“将军”,如图4所示。

         

                 图1 马走日                                                      图2 蹩马腿     

                 

                    图3 蹩马腿                                                  图4 将军     

  

                      图5棋子存储     

棋子存储的坐标按照图5给出,如红方马的坐标为(2 , 6),黑方将的坐标为(9 , 4)

//可以参考的代码如下,主函数已给定,不需要提交,其它代码可自由编写。

#include <iostream>
#include <cmath>
#include <string>
using namespace std;
class ChessPoint
{
public:
 ChessPoint(int row=-1, int col=-1){SetPoint(row,col);}
 ChessPoint(const ChessPoint &src);
 ChessPoint& operator=(const ChessPoint &src){ SetPoint(src.Getrow(),src.Getcol());return *this;}
 bool operator==(const ChessPoint &src) const { return (src.Getrow() == Getrow() && src.Getcol() == Getcol()); }
 void Setrow(int row){this->row=row;}
 void Setcol(int col){this->col=col;}
 void SetPoint(int row, int col){Setrow(row);Setcol(col);}
 int Getrow() const {return row;}
 int Getcol() const {return col;}
private:
 int row,col;
};
class ChessBoard
{
public:
    ChessBoard(){num=0;}
    void AddPiece(int row,int col,string role,string name);  //增加一个棋子
    bool RedMaCanCheck(int row,int col);//红方马(row,col) 是否对黑方存在将军
private:
    int num;    //目前棋子数量
    ChessPoint point[32]; //棋子坐标
    string role[32];    //红方或黑方
    string name[32];    //棋子名称
};
void ChessBoard::AddPiece(int row,int col,string role,string name)
{
    point[num]=ChessPoint(row,col);
    this->role[num]=role;
    this->name[num]=name;
    num++;
}
int main()
{
    ChessBoard CB;
    int n,row,col;
    string role,name;
    cin>>n;
    while(n--)
    {
        cin>>row>>col>>role>>name;
        CB.AddPiece(row,col,role,name);
    }
    cin>>row>>col;
    if(CB.RedMaCanCheck(row,col))
        cout<<"Yes"<<endl;
    else
        cout<<"No"<<endl;
    return 0;
}

输入:

n个棋子和n棋子的信息(位置,标识),红方马的坐标。

输出:

当前红方马对敌方是否存在“将军”?是输出 "Yes" 否则输出 "No"

示例输入:

5
9 4 黑 将
7 7 黑 炮
6 4 黑 卒
3 4 红 兵
1 3 红 帅
2 6

示例输出:

No

提示:

参考答案:

解锁文章

没有看到答案?微信扫描二维码可免费解锁文章

微信扫描二维码解锁

使用微信扫描二维码打开广告页面后可以立即关闭,再刷新此页面即可正常浏览此文章

所跳转广告均由第三方提供,并不代表本站观点!

已经扫描此二维码?点此立即跳转

code

这个人很懒,什么都没留下

文章评论