日期:2026年1月4日
ZeroJudge 題目連結:a518. 12468 - Zapping
解題想法
有三種可能性,如果 a 等於 b,不需要切換,答案為 0;如果 a 大於 b,按下再從另一頭繞回來,或是一直按上;如果 a 小於 b,按上再從另一頭繞回來,或是一直按下。對後面兩種狀況,分別計算按上或下的次數,答案是較小的那個。
Python 程式碼
使用時間約為 16 ms,記憶體約為 2.9 MB,通過測試。
import sys
for line in sys.stdin:
a, b = map(int, line.split())
if a == -1 and b == -1: break
up, down = 100, 100 # 按上、下最少的次數,預設為超出範圍的值
if a == b: # a 等於 b,不需切換
up = down = 0
elif a > b: # a 大於 b,按下再從另一頭繞回來,或是一直按上
up = a - b
down = 100 - a + b
else: # a 小於 b,按上再從另一頭繞回來,或是一直按下
up = a + 100 - b
down = b - a
print(min(up, down))
C++ 程式碼
使用時間約為 2 ms,記憶體約為 40 kB,通過測試。
#include <cstdio>
int main() {
int a, b;
while(scanf("%d %d", &a, &b) != EOF) {
if (a == -1 && b == -1) break;
int up = 100, down = 100; // 按上、下最少的次數,預設為超出範圍的值
if (a == b) { // a 等於 b,不需切換
up = 0; down = 0;
} else if (a > b) { // a 大於 b,按下再從另一頭繞回來,或是一直按上
up = a - b;
down = 100 - a + b;
} else { // a 小於 b,按上再從另一頭繞回來,或是一直按下
up = a + 100 - b;
down = b - a;
}
if (up < down) printf("%d\n", up);
else printf("%d\n", down);
}
return 0;
}
沒有留言:
張貼留言