熱門文章

2026年1月4日 星期日

ZeroJudge 解題筆記:a518. 12468 - Zapping

作者:王一哲
日期: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;
}


沒有留言:

張貼留言