PAT_B_1089_Java(20分)
生活随笔
收集整理的這篇文章主要介紹了
PAT_B_1089_Java(20分)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;public class Main {// w1,w2是狼,word是玩家說的話private static boolean judge(int w1, int w2, int word) {// 判斷是否是真話if (word < 0 && (0 == word + w1 || 0 == word + w2)) {return true; // 語義:某位玩家是狼,并且他真的是狼} else if (word > 0 && word != w1 && word != w2) {return true; // 語義:某位玩家是人,并且他真的是人}return false; // 否則是謊話}public static void main(String[] args) throws IOException {BufferedReader br = new BufferedReader(new InputStreamReader(System.in));int n = Integer.parseInt(br.readLine()); // 玩家人數int[] word = new int[n + 1]; // 玩家說的話for (int i = 1; i <= n; ++i) {word[i] = Integer.parseInt(br.readLine());}boolean find = false; // 初始未找到狼for (int i = 1; i < n && !find; ++i) { // 假設第i位是狼,且未找到狼for (int j = i + 1; j <= n && !find; ++j) { // 假設第j位是狼,且未找到狼boolean word1 = judge(i, j, word[i]); // i說的話boolean word2 = judge(i, j, word[j]); // j說的話if (word1 && !word2 || !word1 && word2) {// 一真一假int liePeopleNum = 0; // 說謊的“好人”數// 遍歷“好人”,找到說謊的“好人”數for (int k = 1; k <= n && liePeopleNum <= 1; ++k) {if (k != i && k != j && !judge(i, j, word[k])) {++liePeopleNum; // k(“好人”)說假話,說謊的“好人”數加1}}if (1 == liePeopleNum) { // 有且僅有一個“好人”說謊find = true; // 已找到System.out.println(i + " " + j);// i和j是狼}}}}if (false == find) {System.out.println("No Solution"); // 未找到,無解}}
}
總結
以上是生活随笔為你收集整理的PAT_B_1089_Java(20分)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: WKT解读
- 下一篇: PAT_B_1085_Java(25分)