熱門文章

2025年10月7日 星期二

ZeroJudge 解題筆記:f348. 完全偶數

作者:王一哲
日期:2025年10月7日


ZeroJudge 題目連結:f348. 完全偶數

解題想法


我先寫一個函式 check 判斷輸入的整數 n 是否每一位都是偶數;再寫另一個函式 solve,找最接近 n 的完全偶數距離。

Python 程式碼


簡單但較慢的寫法,循序搜尋,使用時間約為 30 ms,記憶體約為 3 MB,通過測試。
def check(n):  # 檢查輸入的整數是否每一位都是偶數
    while n:
        if n%10%2 == 1:
            return False
        n //= 10
    return True

def solve(n):  # 輸入整數,找最接近的完全偶數距離
    if check(n): return 0  # 特例,n 是完全偶數,回傳 0
    lower, upper, cnt = n-1, n+1, 0  # 往下找、往上找、次數
    while True:  # 找到答案為止
        cnt += 1  # 次數加 1
        if check(lower): return cnt  # 如果 lower 是完全偶數,回傳 cnt
        if check(upper): return cnt  # 如果 uper 是完全偶數,回傳 cnt
        lower -= 1; upper += 1  # lower 減 1,upper 加 1
    return -1  # 預設的回傳值,用不到

print(solve(int(input())))


C++ 程式碼


使用時間約為 1 ms,記憶體約為 56 kB,通過測試。
#include <cstdio>

bool check(int n) {  // 檢查輸入的整數是否每一位都是偶數
    while(n) {
        if (n%10%2 == 1) return false;
        n /= 10;
    }
    return true;
}

int solve(int n) {  // 輸入整數,找最接近的完全偶數距離
    if (check(n)) return 0;  // 特例,n 是完全偶數,回傳 0
    int lower = n-1, upper = n+1, cnt = 0;  // 往下找、往上找、次數
    while(true) {  // 找到答案為止
        cnt++;  // 次數加 1
        if (check(lower)) return cnt;  // 如果 lower 是完全偶數,回傳 cnt
        if (check(upper)) return cnt;  // 如果 uper 是完全偶數,回傳 cnt
        lower--; upper++;  // lower 減 1,upper 加 1
    }
    return -1;  // 預設的回傳值,用不到
}

int main() {
    int n; scanf("%d", &n);
    printf("%d\n", solve(n));
    return 0;
}


沒有留言:

張貼留言