首页 > 试题广场 >

下象棋

[编程题]下象棋
  • 热度指数:2699 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解

牛妹在和牛牛下牛客象棋。现在轮到牛妹了,牛妹想知道她在这一回合能否战胜牛牛。

棋盘chessboard上只可能包含:炮,将,车,兵

牛客象棋的规则解释:
炮:炮在不吃子的时候,走动与车完全相同,但炮在吃棋子时,必须跳过一个棋子,我方的和敌方的都可以
兵:可以上下左右移动,每次只能移动一格
车:上下左右均可走,只要无棋子阻拦,步数不受限制。
将:可以上下左右移动,每次只能移动一格
接下来给出一个棋盘,牛妹的棋子用大写字母表示,牛牛的棋子用小写字母表示。
将用表示,炮用表示,车用表示,兵用表示,没有棋子的格子用表示

保证棋盘上一定同时包含各一个。

牛妹能胜利则返回"Happy",否则返回"Sad"

示例1

输入

["......", "..B...", "P.C.j.", "......", "..b..."," ...J.." ]

输出

"Happy"

说明

牛妹的炮可以攻击到牛牛的将,所以获胜

备注:


import java.util.*;
  
  
public class Solution {
    /**
     *
     * @param chessboard string字符串一维数组
     * @return string字符串
     */
     public String playchess(String[] chessboard) {
        // write code here
        if (chessboard == null || chessboard.length == 0) {
            return "Sad";
        }
        String Happy = "Happy";
        int rows = chessboard.length;
        int cols = chessboard[0].length();

        int[][] directions = {{0, -1}, {0, 1}, {-1, 0}, {1, 0}};

        //
        for (int i = 0; i < rows; i++) {
            for (int j = 0; j < cols; j++) {
                // 找到j
                if (chessboard[i].charAt(j) == 'j') {
                    //兵/将吃将
                    if (((j - 1) >= 0 && ('B' == chessboard[i].charAt(j - 1) || 'J' == chessboard[i].charAt(j - 1)))
                            || ((j + 1) < cols && ('B' == chessboard[i].charAt(j + 1) || 'J' == chessboard[i].charAt(j + 1)))
                            || ((i - 1) >= 0 && ('B' == chessboard[i - 1].charAt(j) || 'J' == chessboard[i - 1].charAt(j)))
                            || ((i + 1) < rows && ('B' == chessboard[i + 1].charAt(j) || 'J' == chessboard[i + 1].charAt(j)))) {
                        return Happy;
                    }

                    int len = Math.max(i, rows - i);
                    len = Math.max(len, j);
                    len = Math.max(len, cols - j);
                    for (int k = 0; k <= len; k++) {
                        //车吃将
                        if (((j - k) >= 0 && 'C' == chessboard[i].charAt(j - k))
                                || ((j + k) < cols && 'C' == chessboard[i].charAt(j + k))
                                || ((i - k) >= 0 && 'C' == chessboard[i - k].charAt(j))
                                || ((i + k) < rows && 'C' == chessboard[i + k].charAt(j))) {
                            return Happy;
                        }
                        //炮吃将
                        if (((j - k) >= 0 && 'P' == chessboard[i].charAt(j - k))) {
                            for (int kk = 1; kk < k - 1; kk++) {
                                if ('.' != chessboard[i].charAt(j - kk)) {
                                    return Happy;
                                }
                            }
                        }
                        if (((j + k) < cols && 'P' == chessboard[i].charAt(j + k))) {
                            for (int kk = 1; kk < k - 1; kk++) {
                                if ('.' != chessboard[i].charAt(j + kk)) {
                                    return Happy;
                                }
                            }
                        }
                        if (((i - k) >= 0 && 'P' == chessboard[i - k].charAt(j))) {
                            for (int kk = 1; kk < k - 1; kk++) {
                                if ('.' != chessboard[i - kk].charAt(j)) {
                                    return Happy;
                                }
                            }
                        }
                        if (((i + k) < rows && 'P' == chessboard[i + k].charAt(j))) {
                            for (int kk = 1; kk < k - 1; kk++) {
                                if ('.' != chessboard[i + kk].charAt(j)) {
                                    return Happy;
                                }
                            }
                        }
                    }
                    break;
                }
            }
        }
        return "Sad";
    }

}

编辑于 2021-03-05 09:24:41 回复(0)

问题信息

难度:
3条回答 4026浏览

热门推荐

通过挑战的用户

查看代码