A和B和国际象棋

时间:2015-03-13 19:54:08

标签: java

我正在处理Codeforces问题" A和B以及Chess",具体如下:

  

一个。每次测试A和B以及国际象棋时间限制每秒1秒内存限制   测试256兆字节输入标准输入输出标准输出

     

A和B正准备参加编程比赛。

     

培养他们的逻辑思维并更好地解决问题,A和B.   决定下棋。在比赛期间,A想知道谁的位置   现在更强了。

     

对于每个国际象棋棋子我们知道它的重量:

the queen's weight is 9,
the rook's weight is 5,
the bishop's weight is 3,
the knight's weight is 3,
the pawn's weight is 1,
the king's weight isn't considered in evaluating position. 
     

玩家的体重等于他所有作品的重量总和   董事会。

     

由于A不喜欢数数,他请你帮他确定哪一个   球员的位置重量较大。输入

     

输入包含八行,每行八个字符 - 电路板   描述

     

电路板上的白色部分用大写字母标记   黑色部分用小写字母标记。

     

白色部分表示如下:女王代表是   ' Q',车 - 作为' R',主教 - 作为' B',骑士 - 作为' N',   典当 - 作为' P',国王 - 作为' K'。

     

黑色部分表示为' q'' r'' b',' n',' p& #39;,' k',   分别

     

电路板的空方块标记为'。' (一点)。

     

无法保证可以实现给定的国际象棋位置   真正的游戏。具体来说,可以有任意(可能为零)   每种类型的数字,国王可能受到攻击等。   输出

     

Print" White" (没有引号)如果重量的位置   白色碎片超过黑色位置的重量   碎片,印刷"黑"如果黑块的重量超过   白色碎片的重量和打印" Draw"如果权重   白色和黑色的棋子是平等的。样品测试

Case 1

Input

...QK...
........
........
........
........
........
........
...rk...

Output

White


Case 2

Input

rnbqkbnr
pppppppp
........
........
........
........
PPPPPPPP
RNBQKBNR

Output

Draw


Case 3:

Input

rppppppr
...k....
........
........
........
........
K...Q...
........

Output

Black
     

请注意

     

在第一个测试样品中白色位置的重量   碎片等于9,黑块的位置的重量   等于5。

     

在第二个测试样本中,黑色位置的权重   白色片段等于39。

     

在第三个测试样品中白色位置的重量   碎片等于9,黑块的位置的重量   等于16。

我的代码是:

import java.util.Scanner;

public class chess {


    private final static int QUEEN = 9;
    private final static int ROOK = 5;
    private final static int BISHOP = 3;
    private final static int KNIGHT = 3;
    private final static int PAWN = 1;
    private final static int KING = 0;


    public static void main(String[] args) {

        int blackScore = 0;
        int whiteScore = 0;

        Scanner scan = new Scanner(System.in);

        String[] input = new String[8];
        input[0] = scan.nextLine();
        input[1] = scan.nextLine();
        input[2] = scan.nextLine();
        input[3] = scan.nextLine();
        input[4] = scan.nextLine();
        input[5] = scan.nextLine();
        input[6] = scan.nextLine();
        input[7] = scan.nextLine();

        for(int i = 0; i < input.length; i++) {
            if(input[i].contains("Q")) {
                whiteScore += QUEEN;
            }

            if(input[i].contains("R")) {
                whiteScore += ROOK;
            }

            if(input[i].contains("N")) {
                whiteScore += KNIGHT;
            }

            if(input[i].contains("B")) {
                whiteScore += BISHOP;
            }

            if(input[i].contains("P")) {
                whiteScore += PAWN;
            }

            if(input[i].contains("K")) {
                whiteScore += KING;
            }


            if(input[i].contains("q")) {
                blackScore += QUEEN;
            }

            if(input[i].contains("n")) {
                blackScore += KNIGHT;
            }

            if(input[i].contains("b")) {
                blackScore += BISHOP;
            }

            if(input[i].contains("p")) {
                blackScore += PAWN;
            }

            if(input[i].contains("k")) {
                blackScore += KING;
            }

            if(input[i].contains("r")) {
                blackScore += ROOK;
            }    


        }

        if(whiteScore != blackScore) {

            if(blackScore > whiteScore) {
                System.out.println("Black");
            }

            if (whiteScore > blackScore) {
                System.out.println("White");

            } 
        }else {
            System.out.println("Draw");
        }    


        System.out.println(whiteScore);
        System.out.println(blackScore);
    }

}

有谁能解释我做错了什么?谢谢!

2 个答案:

答案 0 :(得分:0)

我认为你必须使用“else if”语句而不是“if”,尝试这个,我希望这有帮助。

import java.util.Scanner;

public class chess {

private final static int QUEEN = 9;
private final static int ROOK = 5;
private final static int BISHOP = 3;
private final static int KNIGHT = 3;
private final static int PAWN = 1;
private final static int KING = 0;


public static void main(String[] args) {

    int blackScore = 0;
    int whiteScore = 0;

    Scanner scan = new Scanner(System.in);

    String[] input = new String[8];
    input[0] = scan.nextLine();
    input[1] = scan.nextLine();
    input[2] = scan.nextLine();
    input[3] = scan.nextLine();
    input[4] = scan.nextLine();
    input[5] = scan.nextLine();
    input[6] = scan.nextLine();
    input[7] = scan.nextLine();

    for(int i = 0; i < input.length; i++) {
        if(input[i].contains("Q")) {
            whiteScore += QUEEN;
        }

        else if(input[i].contains("R")) {
            whiteScore += ROOK;
        }

        else if(input[i].contains("N")) {
            whiteScore += KNIGHT;
        }

        else if(input[i].contains("B")) {
            whiteScore += BISHOP;
        }

        else if(input[i].contains("P")) {
            whiteScore += PAWN;
        }

        else if(input[i].contains("K")) {
            whiteScore += KING;
        }


        else if(input[i].contains("q")) {
            blackScore += QUEEN;
        }

        else if(input[i].contains("n")) {
            blackScore += KNIGHT;
        }

        else if(input[i].contains("b")) {
            blackScore += BISHOP;
        }

        else if(input[i].contains("p")) {
            blackScore += PAWN;
        }

        else if(input[i].contains("k")) {
            blackScore += KING;
        }

        else if(input[i].contains("r")) {
            blackScore += ROOK;
        }


    }

    if(whiteScore != blackScore) {

    if(blackScore > whiteScore) {
        System.out.println("Black");
    }

    if (whiteScore > blackScore) {
        System.out.println("White");

    } 
    }else {
        System.out.println("Draw");
    }


    System.out.println(whiteScore);
    System.out.println(blackScore);
}
}

答案 1 :(得分:0)

问题在于,只要在一条线上发现任何数量的棋子,你就只包括棋子一个的分数。看到你与解决方案有多接近,我认为仅仅提示就足够了!