首页 > 试题广场 >

井字棋

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

KiKiBoBo玩 “井”字棋。也就是在九宫格中,只要任意行、列,或者任意对角线上面出现三个连续相同的棋子,就能获胜。请根据棋盘状态,判断当前输赢。


输入描述:
三行三列的字符元素,代表棋盘状态,字符元素用空格分开,代表当前棋盘,其中元素为K代表KiKi玩家的棋子,为O表示没有棋子,为B代表BoBo玩家的棋子。


输出描述:
如果KiKi获胜,输出“KiKi wins!”;
如果BoBo获胜,输出“BoBo wins!”;
如果没有获胜,输出“No winner!”。
示例1

输入

K O B
O K B
B O K

输出

KiKi wins!
import java.util.Scanner;
import java.util.Objects;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String[][] arr = new String[3][3];

        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr[0].length; j++) {
                arr[i][j] = in.next();
            }
        }

        //最后结算
        if (check_win(arr, "K")) {
            System.out.println("KiKi wins!");
        } else if (check_win(arr, "B")) {
            System.out.println("BoBo wins!");
        } else {
            System.out.println("No winner!");
        }
    }
    //写一个方法判断是否满足胜利条件,返回一个布尔值
    public static boolean check_win(String[][] arr, String player) {
        for (int i = 0; i < arr.length; i++) { //行和列
            if ((Objects.equals(arr[i][0], player) &&
                    Objects.equals(arr[i][1], player) &&
                    Objects.equals(arr[i][2], player))
                    || (Objects.equals(arr[0][i], player) &&
                        Objects.equals(arr[1][i], player) &&
                        Objects.equals(arr[2][i], player))) {
                return true;
            }

            if ((Objects.equals(arr[0][0], player) &&
                    Objects.equals(arr[1][1], player) &&
                    Objects.equals(arr[2][2], player))
                    || (Objects.equals(arr[0][2], player) &&
                        Objects.equals(arr[1][1], player) &&
                        Objects.equals(arr[2][0], player))) {
                return true;
            }
        }
        return false;
    }
}

发表于 2024-09-12 16:34:35 回复(0)
import java.util.Scanner;

public class Main{
    public static void main(String[] args){
        Scanner sc=new Scanner(System.in);
        String[][] arr=new String[3][3];
        for(int i=0;i<3;i++)
            for(int j=0;j<3;j++)
                arr[i][j]=sc.next();
        String type="";
        Boolean case1=arr[0][0].equals(arr[0][1])&&arr[0][1].equals(arr[0][2]);
        Boolean case2=arr[0][0].equals(arr[1][0])&&arr[1][0].equals(arr[2][0]);
        Boolean case3=arr[0][0].equals(arr[1][1])&&arr[1][1].equals(arr[2][2]);
        
        Boolean case4=arr[0][1].equals(arr[1][1])&&arr[1][1].equals(arr[2][1]);
        Boolean case5=arr[1][0].equals(arr[1][1])&&arr[1][1].equals(arr[1][2]);
        Boolean case8=arr[0][2].equals(arr[1][1])&&arr[1][1].equals(arr[2][0]);
        
        Boolean case6=arr[2][0].equals(arr[2][1])&&arr[2][1].equals(arr[2][2]);
        Boolean case7=arr[0][2].equals(arr[1][2])&&arr[1][2].equals(arr[2][2]);
        if(case1||case2||case3){
            if(!arr[0][0].equals("O")) type=arr[0][0];
        }else if(case4||case5||case8){
            if(!arr[1][1].equals("O")) type=arr[1][1];
        } else if(case6||case7){
            if(!arr[2][2].equals("O")) type=arr[2][2];
        }
        if(type.equals("K")) type="KiKi";
        else if(type.equals("B")) type="BoBo";
        if(type.equals("")) System.out.printf("No winner!\n");
        else System.out.printf("%s wins!\n",type);
    }
}

发表于 2022-08-12 22:30:58 回复(0)
import java.util.*;
public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        //井字棋
        char[][] Martix = new char[3][3];
        for(int i = 0;i < Martix.length;i++){
            for(int j = 0;j < Martix[i].length;j++){
                Martix[i][j] = scanner.next().charAt(0);
            }
        }
        //三个字母都在一竖下
        for(int i = 0;i < Martix.length;i++){
            if(Martix[0][i] == Martix[1][i] && Martix[1][i] == Martix[2][i]){
                if(Martix[0][i] == 'K'){
                    System.out.println("KiKi wins!");
                    return;
                }else if(Martix[0][i] == 'B'){
                    System.out.println("BoBo wins!");
                    return;
                }
            }
        }
        
        //三个字母都在一横下
        for(int j = 0;j < Martix.length;j++){
            if(Martix[j][0] == Martix[j][1] && Martix[j][1] == Martix[j][2]){
                if(Martix[j][1] == 'K'){
                    System.out.println("KiKi wins!");
                    return;
                }else if(Martix[j][1] == 'B'){
                    System.out.println("BoBo wins!");
                    return;
                }
            }
        }
        
        //三个字母都在对角线上
        if(Martix[0][0] == Martix[1][1] && Martix[1][1] == Martix[2][2]){
            if(Martix[1][1] == 'K'){
                System.out.println("KiKi wins!");
                return;
            }else if(Martix[1][1] == 'B'){
                System.out.println("BoBo wins!");
                return;
            }
        }
        if(Martix[0][2] == Martix[1][1] && Martix[0][2] == Martix[2][0]){
            if(Martix[1][1] == 'K'){
                System.out.println("KiKi wins!");
                return;
            }else if(Martix[1][1] == 'B'){
                System.out.println("BoBo wins!");
                return;
            }
        }
        System.out.println("No winner!");
    }
}

发表于 2022-07-04 16:23:44 回复(0)
import java.util.Scanner;

public class Main{
    
    public static void main(String[] args){
        
        Scanner sin = new Scanner(System.in);
        String[] c = new String[9];
        int ic = 0;
        while(sin.hasNext()){
            c[ic++] = sin.next();
        }
        
        // 把一维数组变成二维数组 
        String[][] cc = new String[3][3];
        int con = 0;
        for(int n = 0;n<3;n++){
            for(int m=0;m<3;m++){
                cc[n][m] = c[con++];
            }
        }
        
        // 玩 “井”字棋
        String s = print1(cc);
        String s2 = print2(cc);
        String s3 = print3(cc);
       if(s.equals("K") || s2.equals("K") || s3.equals("K")){
           System.out.println("KiKi wins!");
       }else if(s.equals("B") || s2.equals("B") || s3.equals("B")){
        System.out.println("BoBo wins!");
       }else {
           System.out.println("No winner!");
       }
       
    }
    
    public static String print1(String[][] list){
        String s = "";
        for(int n = 0;n<3;n++){
            for(int m=0;m<3;m++){
                s += list[n][m];
            }
            if(s.equals("KKK")){
                return "K";
            }else if(s.equals("BBB")){
                return "B";
            }
           //清空字符串
            s = "";
        }
        return "O";
    }
    
        public static String print2(String[][] list){
        String s = "";
            int i = 0;
        for(int n = 0;n<3;n++){
            for(int m=0;m<3;m++){
                s += list[m][i];
            }
            i++;
            if(s.equals("KKK")){
                return "K";
            }else if(s.equals("BBB")){
                return "B";
            }
           //清空字符串
            s = "";
        }
        return "O";
    }
    
      public static String print3(String[][] list){
        String s = "";
        for(int n = 0;n<1;n++){
            for(int m=0;m<3;m++){
                s += list[m][m];
                
            }
            if(s.equals("KKK")){
                return "K";
            }else if(s.equals("BBB")){
                return "B";
            }
           //清空字符串
            s = "";
        }
          
          int t = 2;
        for(int n = 0;n<1;n++){
            for(int m=0;m < 3;m++){
                s += list[m][t--];
                
            }
            if(s.equals("KKK")){
                return "K";
            }else if(s.equals("BBB")){
                return "B";
            }
           //清空字符串
            s = "";
        }
        return "O";
    }
}

发表于 2022-01-28 15:02:02 回复(0)
//我的代码最简洁
//先扫描行,再扫描列,如果都没有,那么就直接取最中间的就行
import java.util.Scanner;

public class Main {

    public static void main(String[] args) {

        Scanner in = new Scanner(System.in);

        Character[][] tic = new Character[3][3];
        char ch = 'f';
        for (int i = 0; i < 3; i++) {
            int j;
            for (j = 0; j < 3; j++) {
                tic[i][j] = in.next().charAt(0);
            }
            if (tic[i][0] == tic[i][1] && tic[i][1] == tic[i][2]){
                ch = tic[i][0];
                break;
            }
        }

        for (int j = 0; j < 3; j++) {
            if (tic[0][j] == tic[1][j] && tic[1][j] == tic[2][j]){
                ch = tic[0][j];
                break;
            }
        }
        if (ch == 'f'){
            ch = tic[1][1];
        }
        if (ch == 'K'){
            System.out.println("KiKi wins!");
        }else if (ch == 'O'){
            System.out.println("No winner!");
        }else if (ch == 'B'){
            System.out.println("BoBo wins!");
        }
    }
}

发表于 2021-10-24 09:36:19 回复(1)
import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String[][] chessBoard = new String[3][3];
        for (int i = 0; i < 3; i++) {
            for (int j = 0; j < 3; j++) {
                chessBoard[i][j] = scanner.next();
            }
        }
        String result = checkMessage(chessBoard);
        System.out.println(result);
    }
    public static String checkMessage(String[][] chessBoard) {
        String message ;
        for (int i = 0; i < 3; i++) {
            if (chessBoard[i][0].equals(chessBoard[i][1]) && chessBoard[i][1].equals(chessBoard[i][2])) {
                message = checkMan(chessBoard[i][0]);
                return message;
            } else if (chessBoard[0][i].equals(chessBoard[1][i]) && chessBoard[1][i].equals(chessBoard[2][i])) {
                message = checkMan(chessBoard[0][i]);
                return message;
            }
        }
        message = checkMan(chessBoard[1][1]);
        if (chessBoard[0][0].equals(chessBoard[1][1]) && chessBoard[1][1].equals(chessBoard[2][2])) {
            return message;
        } else if (chessBoard[0][2].equals(chessBoard[1][1]) && chessBoard[1][1].equals(chessBoard[2][0])) {
            return message;
        }
        return message;
    }
    public static String checkMan(String str) {
        switch (str) {
            case "K":
                return "KiKi wins!";
            case "B":
                return "BoBo wins!";
            case "O":
                return "No winner!";
        }
        return null;
    }
}

编辑于 2021-03-19 20:01:29 回复(0)
这样做应该容易理解吧
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner input=new Scanner(System.in);
        char[][] key=new char[3][3];
        for(int i=0;i<3;i++){
            for(int j=0;j<3;j++){
                key[i][j]=input.next().charAt(0);
            }
        }
        for(int i=0;i<3;i++){
            if(key[0][i]=='O')continue;
            if(key[0][i]==key[1][i]&&key[0][i]==key[2][i]){
                if(key[0][i]=='K'){
                    System.out.println("KiKi wins!");
                }else{
                    System.out.println("BoBo wins!");
                }
                return;
            }else if(key[i][0]==key[i][1]&&key[i][0]==key[i][2]){
                if(key[i][0]=='K'){
                    System.out.println("KiKi wins!");
                }else{
                    System.out.println("BoBo wins!");
                }
                return;
            }else if(key[0][0]==key[1][1]&&key[0][0]==key[2][2]){
                if(key[0][0]=='K'){
                    System.out.println("KiKi wins!");
                }else{
                    System.out.println("BoBo wins!");
                }
                return;
            }else if(key[0][2]==key[1][1]&&key[0][2]==key[2][0]){
                if(key[0][2]=='K'){
                    System.out.println("KiKi wins!");
                }else{
                    System.out.println("BoBo wins!");
                }
                return;
            }
        }
        System.out.println("No winner!");

    }
}

发表于 2021-01-03 20:21:58 回复(0)