題目為經典 ACM 風格:讀取多組測資,每組包含 n 位參賽者,每人有 m 道題目嘗試,根據解題數、罰時、姓名排序輸出。以下提供對應的 Java 完整實作。
struct → Java static class (或獨立 record Java 16+)。sort + cmp 函數 → Java Arrays.sort + Comparator / Comparable。scanf/printf → Java Scanner/System.out.printf (或 BufferedReader 高效讀取)。getchar 處理括號 → Java Scanner 同樣可解析。import java.util.*;
public class ContestRank {
static class Contestant implements Comparable<Contestant> {
String name;
int solved = 0;
int penalty = 0;
@Override
public int compareTo(Contestant o) {
if (this.solved != o.solved) return Integer.compare(o.solved, this.solved); // 解題數降序
if (this.penalty != o.penalty) return Integer.compare(this.penalty, o.penalty); // 罰時升序
return this.name.compareTo(o.name); // 姓名字典序升序
}
@Override
public String toString() {
return String.format("%-10s %2d %4d", name, solved, penalty);
}
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
StringBuilder out = new StringBuilder();
while (in.hasNextInt()) {
int n = in.nextInt(); // 參賽者數 (原題 n, m 含義需確認,這裡假設 n=人數)
int m = in.nextInt(); // 題目數
if (n == 0 && m == 0) break; // 部分題目以 0 0 結束
Contestant[] arr = new Contestant[n];
for (int i = 0; i < n; i++) {
arr[i] = new Contestant();
arr[i].name = in.next(); // 讀姓名
for (int j = 0; j < m; j++) {
int s = in.nextInt(); // 耗時/嘗試次數
if (s > 0) {
arr[i].solved++;
int k = 0;
// 處理可能的 (k) 罰時格式
if (in.hasNext("\\(")) { // 簡化:實際需逐字元解析
in.next("\\)"); // 略過
}
arr[i].penalty += s + k * m;
}
}
}
Arrays.sort(arr);
for (Contestant c : arr) out.append(c).append('\n');
}
System.out.print(out);
in.close();
}
}
| C++ | Java | 說明 |
|---|---|---|
scanf("%d", &n) | in.nextInt() | Scanner 自動跳過空白 |
strcmp(a, b) < 0 | a.compareTo(b) < 0 | String 實作 Comparable |
sort(arr, arr+n, cmp) | Arrays.sort(arr) | 元素需實作 Comparable 或傳 Comparator |
getchar() == '(' | in.findInLine("\\(") != null | Scanner 正則匹配單字元 |
全域陣列 stu[10000] | 動態 ArrayList 或足夠大陣列 | Java 陣列需 new,建議用 List |
BufferedReader + StringTokenizer 或自訂 FastScanner。StringBuilder 最後一次 print,避免頻繁系統呼叫。compareTo 純計算。提供題目完整敘述與測資可獲得更精確的移植代碼。上述代碼為邏輯骨架,需根據實際輸入格式微調解析細節。