首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 邏輯推理練習:乒乓球隊比賽配對問題

     編輯:Java 相關知識

問題描述

甲隊 a,b,c 對陣乙隊 x,y,z。已知:a 不與 x 比,c 不與 x,z 比。求三對比賽配對。

解題思路

窮舉甲隊三人對乙隊三人的全排列 (3! = 6 種),過濾滿足條件的排列。

代碼實現


import java.util.ArrayList;
import java.util.List;

public class PingPangMatch {
    static class Match {
        String a, b, c; // a,b,c 的對手
        Match(String a, String b, String c) { this.a=a; this.b=b; this.c=c; }
        @Override public String toString() {
            return "a vs " + a + ", b vs " + b + ", c vs " + c;
        }
    }

    public static void main(String[] args) {
        String[] op = {"x", "y", "z"};
        List<Match> valid = new ArrayList<>();

        for (int i = 0; i < 3; i++)      // a 的對手
            for (int j = 0; j < 3; j++)  // b 的對手
                for (int k = 0; k < 3; k++) { // c 的對手
                    // 三人對手互不相同
                    if (op[i].equals(op[j]) || op[j].equals(op[k]) || op[i].equals(op[k])) continue;
                    // 條件過濾
                    if (op[i].equals("x")) continue; // a 不與 x
                    if (op[k].equals("x") || op[k].equals("z")) continue; // c 不與 x,z
                    valid.add(new Match(op[i], op[j], op[k]));
                }

        for (Match m : valid) System.out.println(m);
    }
}

輸出結果


a vs y, b vs x, c vs z

唯一解:a-y, b-x, c-z。

註記

原文標題提到「判斷素數」屬誤植,本題純邏輯推理,與素數無關。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved