三子棋の胜负判断(洛谷P1838题题解,Java语言描述)
生活随笔
收集整理的這篇文章主要介紹了
三子棋の胜负判断(洛谷P1838题题解,Java语言描述)
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
題目要求
P1838題目鏈接
分析
我在想是不是要把這個(gè)題再寫成掃雷那樣的矩陣判斷,想換個(gè)feel,那就用Set來處理。
眾所周知Set有好處,查找快,雖說這只是九宮格三子棋,但contains()就很快啊……
我們仔細(xì)分析一下這個(gè)題,其實(shí)情況是可以窮舉的:
獲勝條件是先湊齊以下八種的任意一種:
- 1 + 2 + 3
- 1 + 4 + 7
- 1 + 5 + 9
- 2 + 5 + 8
- 3 + 6 + 9
- 3 + 5 + 7
- 4 + 5 + 6
- 7 + 8 + 9
用contains()即可……
就當(dāng)這是一種新的思路吧……
AC代碼(Java語言描述)
import java.util.HashSet; import java.util.Scanner; import java.util.Set;public class Main {private static boolean winJudge(Set<Integer> set) {if ((set.contains(1)) && ((set.contains(2) && set.contains(3)) || (set.contains(4) && set.contains(7)) ||(set.contains(5) && set.contains(9)))) {return true;}if ((set.contains(3)) && ((set.contains(6) && set.contains(9)) || (set.contains(5) && set.contains(7)))) {return true;}if (set.contains(2) && set.contains(5) && set.contains(8)) {return true;}if (set.contains(4) && set.contains(5) && set.contains(6)) {return true;}return set.contains(7) && set.contains(8) && set.contains(9);}public static void main(String[] args) {Set<Integer> xiaoa_set = new HashSet<>();Set<Integer> uim_set = new HashSet<>();Scanner scanner = new Scanner(System.in);char[] sequence = scanner.nextLine().toCharArray();scanner.close();for (int i = 0; i < sequence.length; i++) {if ((i & 1) == 0) {xiaoa_set.add(sequence[i]-48);if (winJudge(xiaoa_set)) {System.out.println("xiaoa wins.");return;}} else {uim_set.add(sequence[i]-48);if (winJudge(uim_set)) {System.out.println("uim wins.");return;}}}System.out.println("drew.");} }總結(jié)
以上是生活随笔為你收集整理的三子棋の胜负判断(洛谷P1838题题解,Java语言描述)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 注意满足循环终止条件时counter是否
- 下一篇: Java项目开发全流程实践