本文主要是介绍棋盘问题,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
【问题描述】
小蓝拥有 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。
1 import java.io.BufferedReader;
2 import java.io.IOException;
3 import java.io.InputStreamReader;
4 import java.io.StreamTokenizer;
5 import java.util.Scanner;
6
7 public class Main {
8 private static final StreamTokenizer st = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
9
10 public static void main(String[] args) throws IOException {
11 // Scanner sc = new Scanner(System.in);
12 //
13 // int n = sc.nextInt();
14 // int m = sc.nextInt();
15 int n = next();
16 int m = next();
17 int[][] qipan = new int[n][n];//棋盘大小
18
19 // //初始化棋盘,全是白色
20 // for (int i = 0; i < qipan.length; i++) {
21 // for (int j = 0; j < qipan[0].length; j++) {
22 // qipan[i][j] = 0;
23 // }
24 //// }
25 for (int i = 0; i < m; i++) {
26 int x1, x2, y1, y2;
27 x1 = next();
28 y1 = next();
29 x2 = next();
30 y2 = next();
31 for (int j = x1 - 1; j < x2; j++) {
32 for (int k = y1 - 1; k < y2; k++) {
33 if (qipan[j][k] == 0) {
34 qipan[j][k] = 1;
35 } else {
36 qipan[j][k] = 0;
37 }
38 }
39 }
40 }
41 for (int j = 0; j < qipan.length; j++) {
42 for (int k = 0; k < qipan[j].length; k++) {
43 System.out.print(qipan[j][k]);
44 }
45 System.out.println();
46 }
47 //
48 // sc.close();
49 }
50
51 private static int next() throws IOException {
52 st.nextToken();
53 return (int) st.nval;
54 }
55 }
这篇关于棋盘问题的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!