甲隊 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。
原文標題提到「判斷素數」屬誤植,本題純邏輯推理,與素數無關。