[CPE一星49題] UVA10055 - Hashmat the Brave Warrior 題目解析與實作
編輯製作: 蔡豐聲、陳子晴
單位: 中國醫藥大學 醫療資訊學系 程式俱樂部
YT: https://youtu.be/vaROAxQk8CI
## 題目資訊
## 題目解析
小哈是一個勇敢的將領,他帶著年輕的士兵從一個城市移動到另一個城市與敵人對抗。在打仗之前,他會計算己方與敵方士兵的數目差距,來決定要不要開打。
注意: 題目雖然提到小哈的士兵數絕不會比敵人的士兵數大,但輸入資料可能會有反過來的狀況(即「大小」或「小大」)。
## 輸入說明
- 每組測試資料佔一列,包含兩個整數,代表小哈與對手的士兵數。
- 數值不會超過 $2^{32}$。
- 輸入以 EOF (End of File) 結尾。
## 輸出說明
- 輸出兩者數目的差值(正數)。
- 每個輸出結果需獨立佔一行。
## 範例測試
- 輸入:
10 12
14 10
- 輸出:
4
## 解題思路
- 資料型態選擇:
- 由於數值可能達到 $2^{32}$,標準的 int 可能不足以存放(尤其在某些環境下 int 範圍為 $-2^{31} \sim 2^{31}-1$)。
- 建議選用 unsigned long long (64位元) 以確保運算安全。
- 處理連續輸入:
- 使用 while (scanf(...) != EOF) 或 Python 的 sys.stdin 迴圈來處理多組輸入直到檔案結束。
- 計算絕對差距:
- 判斷兩數大小,始終以「大的減去小的」。
- 或者直接使用絕對值函數 abs() 。
## 實作程式碼 (C語言)
#include <stdio.h>
#include <stdlib.h>
int main() {
unsigned long long a = 0, b = 0;
// 讀取直到 EOF
while (scanf("%llu %llu", &a, &b) != EOF) {
if (b >= a) {
printf("%llu\n", b - a);
} else {
printf("%llu\n", a - b);
}
}
return 0;
} ---本著作採用創用 CC 姓名標示-非商業性-禁止改作 3.0 台灣 授權條款授權。
本部落格的免責聲明。
