网络

教育改变生活

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 968|回复: 0
打印 上一主题 下一主题

Java编程-下象棋

[复制链接]

97

主题

98

帖子

447

积分

版主

Rank: 7Rank: 7Rank: 7

积分
447
跳转到指定楼层
楼主
发表于 2020-9-22 17:15:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
题目描述:牛妹在和牛牛下牛客象棋。现在轮到牛妹了,牛妹想知道她在这一回合能否战胜牛牛。
棋盘chessboard上只可能包含:炮,将,车,兵
牛客象棋的规则解释:
炮:炮在不吃子的时候,走动与车完全相同,但炮在吃棋子时,必须跳过一个棋子,我方的和敌方的都可以
兵:可以上下左右移动,每次只能移动一格
车:上下左右均可走,只要无棋子阻拦,步数不受限制。
将:可以上下左右移动,每次只能移动一格
接下来给出一个棋盘,牛妹的棋子用大写字母表示,牛牛的棋子用小写字母表示。
将用J,j表示,炮用P,p表示,车用C,c表示,兵用B,b表示,没有棋子的格子用.表示
保证棋盘上一定同时包含J与j各一个。
输入:
给定chessboard数组
6≤chessboard.size≤10^3
6≤chessboard[i].length≤10^3
输出:
牛妹能胜利则返回"Happy",否则返回"Sad"

示例1
输入:["......",
        "..B...",
        "P.C.j.",
        "......",
        "..b...",
        " ...J.." ]
输出:"Happy"
说明:牛妹的炮可以攻击到牛牛的将,所以获胜

代码实现(by quality丶6):
import java.util.*;
public class Solution {
    /**
     *
     * @param chessboard string字符串一维数组
     * @return string字符串
     */
    public String playchess (String[] chessboard) {
        int len = chessboard.length;
        char[][] a = new char[len][];
        int j = 0;
        int k = 0;
        for(int i = 0; i < len; i++) {
            char [] c = chessboard[i].toCharArray();
            if(chessboard[i].indexOf("j") > -1) {
                j = chessboard[i].indexOf("j");
                k = i;
            }
            a[i] = c;
        }
         
        int ot = 0;
        for(int i = k - 1; i >= 0; i--) {//向上
            if(i == k - 1 && (a[i][j] == 'B' || a[i][j] == 'J')) {
                return "Happy";
            }else if(ot == 0 && a[i][j] == 'C') {
                return "Happy";
            }else if(ot == 1 && a[i][j] == 'P') {
                return "Happy";
            }else if(ot == 0 && a[i][j] != '.') {
                ot ++;
            }else if(ot > 1) {
                break;
            }
        }

        ot = 0;
        for(int i = k + 1; i < len; i++) {//向下
            if(i == k + 1 && (a[i][j] == 'B' || a[i][j] == 'J')) {
                return "Happy";
            }else if(ot == 0 && a[i][j] == 'C') {
                return "Happy";
            }else if(ot == 1 && a[i][j] == 'P') {
                return "Happy";
            }else if(ot == 0 && a[i][j] != '.') {
                ot ++;
            }else if(ot > 1) {
                break;
            }
        }
         
        ot = 0;
        for(int i = j - 1; i >= 0; i--) {//向左
            if(i == j - 1 && (a[k][i] == 'B' || a[k][i] == 'J')) {
                return "Happy";
            }else if(ot == 0 && a[k][i] == 'C') {
                return "Happy";
            }else if(ot == 1 && a[k][i] == 'P') {
                return "Happy";
            }else if(ot == 0 && a[k][i] != '.') {
                ot ++;
            }else if(ot > 1) {
                ot = 0;
                break;
            }
        }
         
        ot = 0;
        for(int i = j + 1; i < a[k].length; i++) {//向右
            if(i == j + 1 && (a[k][i] == 'B' || a[k][i] == 'J')) {
                return "Happy";
            }else if(ot == 0 && a[k][i] == 'C') {
                return "Happy";
            }else if(ot == 1 && a[k][i] == 'P') {
                return "Happy";
            }else if(ot == 0 && a[k][i] != '.') {
                ot ++;
            }else if(ot > 1) {
                break;
            }
        }
        return "Sad";
    }
}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

WEB前端

QQ|手机版|小黑屋|金桨网|助学堂  咨询请联系站长。

GMT+8, 2024-12-22 10:44 , Processed in 0.033120 second(s), 21 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表