日期: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;
}
沒有留言:
張貼留言