棋盘问题

【问题描述】

小蓝拥有 n × n 大小的棋盘,一开始棋盘上全都是白子。小蓝进行了m次操作,每次操作会将棋盘上某个范围内的所有棋子的颜色取反(也就是白色棋子变为黑色,黑色棋子变为白色)。

请输出所有操作做完后棋盘上每个棋子的颜色。

【输入格式】

输入的第一行包含两个整数n,m,用一个空格分隔,表示棋盘大小与操作数。

接下来m行每行包含四个整数 X1,Y1,X2,Y2,相邻整数之间使用一个空格分隔,表示将在X1至X2行和Y1至Y2列中的棋子颜色取反。

【输出格式】

 输出n行,每行n个0或1表示该位置棋子的颜色。如果是白色则输出0,否则输出1。

【样例输入】

3 3
1 1 2 2
2 2 3 3
1 1 3 3

 

【样例输出】

001

010

100

【解题思路】

  • 用 Sanner scan = new Scanner (System.in) 会读取慢,有运行超时的样例。
  • 所以用 StreamTokenizer st = new StreamTokenizer(new BufferedReader(InputStreamReader(System.in)));
  • 数组默认初始化的值是0,可以不用初始化给棋盘赋值0。
    package 蓝桥;
    
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.StreamTokenizer;
    
    public class _02棋盘 {
         private static final StreamTokenizer st = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
    
            public static void main(String[] args) throws IOException {
    //            Scanner sc = new Scanner(System.in);
        //
    //            int n = sc.nextInt();
    //            int m = sc.nextInt();
                int n = next();
                int m = next();
                int[][] qipan = new int[n][n];//棋盘大小
                //不用初始化,数组默认初始值是0
    //            //初始化棋盘,全是白色
    //            for (int i = 0; i < qipan.length; i++) {
    //                for (int j = 0; j < qipan[0].length; j++) {
    //                    qipan[i][j] = 0;
    //                }
    ////            }
                for (int i = 0; i < m; i++) {
                    int x1, x2, y1, y2;
                    x1 = next();
                    y1 = next();
                    x2 = next();
                    y2 = next();
                    for (int j = x1 - 1; j < x2; j++) {
                        for (int k = y1 - 1; k < y2; k++) {
                            if (qipan[j][k] == 0) {
                                qipan[j][k] = 1;
                            } else {
                                qipan[j][k] = 0;
                            }
                        }
                    }
                }
                for (int j = 0; j < qipan.length; j++) {
                    for (int k = 0; k < qipan[j].length; k++) {
                        System.out.print(qipan[j][k]);
                    }
                    System.out.println();
                }
        //
    //            sc.close();
            }
    
    
            //通过BufferedReader、StreamTokenizer定义输入函数,避免输入数据超时
            private static int next() throws IOException {
                st.nextToken();
                return (int) st.nval;//nval读取double类型
    //            String s = in.sval;  //sval读取string类型
            }
    }

     

   

© 版权声明
THE END
支持一下吧
点赞10 分享
评论 抢沙发
头像
请文明发言!
提交
头像

昵称

取消
昵称表情代码快捷回复

    暂无评论内容