SRM 504.5 250pt: TheNumbersWithLuckyLastDigit

問題概要

n(<10^9)が与えられる。nを10*k+4と10*k+7の和で表現したい。最小でいくつ必要か求める問題。

解法

mod 10で考えれば良さそう。10通り場合分けすればO(1)で通る。

感想

手で解くのは不安材料が多すぎる。nが大きい場合は適当にmodをとったりして全探索をかける方が好ましかった。後コーディングも「反復は避けよ」に反するものとなってしまった。
書くべきだったコード

int ans[] = {5,2,3,5,1,3,4,1,2,4};
int lb[] = {20,11,12,23,1,15,16,1,1,19};

class TheNumbersWithLuckyLastDigit {
public:
int find(int n) {
	return n>=lb[n%10]?ans[n%10]:-1;
}