# Brute Force# Number Theory

f348 - 完全偶數

🔗 前往 ZeroJudge 原題

題目描述

題目要求找到離給定正整數 n 最近的「完全偶數」。完全偶數定義為每一位數都是偶數的正整數。輸出最近完全偶數與 n 的距離。

解題思路

程式碼首先預先計算了從 0 到 1000000 之間所有完全偶數,並將結果儲存在布林陣列 a 中。然後,程式碼從 n 開始,向兩個方向搜尋完全偶數:

  1. n 向大方向搜尋,找到第一個完全偶數,計算與 n 的距離。
  2. n 向小方向搜尋,找到第一個完全偶數,計算與 n 的距離。 最後,程式碼輸出兩個距離中的最小值。如果 n 本身就是完全偶數,則距離為 0。如果找不到完全偶數,則輸出 1000000。

複雜度分析

  • 時間複雜度: O(n)
  • 空間複雜度: O(n)

程式碼

#include <iostream>
using namespace std;
int n,ans;
bool a[1000005];
bool ise(int k){
	while(k){
		if(k%2)return 0;
		k/=10;
	}
	return 1;
}
int main(){
	for(int i=0;i<=1000000;i+=2){
		a[i]=ise(i);	
	}
	cin >> n;
	for(int i=n;i<=1000000;++i){
		if(a[i]){
			ans=i-n;
			break;
		}
	}
	if(ans==0&&a[n]==0){
		ans=1000000;
	}
	for(int i=n;i>=0;--i){
		if(a[i]){
			ans=min(ans,n-i);
			break;
		}
	}
	cout << ans;
}

Discussion