SRM454 DIV2 過去問

250 - MinimalDifference

整数A, B, Cが与えられる。
A<=X<=Bかつ、Xの各桁の合計とCの各桁の合計が最も近いXを返せ。
該当するXが複数ある場合は一番小さいやつ返せよな!っていう問題。

public class MinimalDifference {
    public int findNumber(int A, int B, int C) {
        if(A==B) return A;
        int cc = calcDigitSum(C);
        int che = Integer.MAX_VALUE;
        int res = 0;
        for(int i=(A>B?B:A); i<=(A>B?A:B); i++){
            int tmp = Math.abs(calcDigitSum(i) - cc);
            if(tmp<che) {
                che = tmp;
                res = i;
            }
        }
        return res;
    }
    public int calcDigitSum(int n){
        String s = Integer.toString(n);
        int ds = 0;
        for(int i=0; i<s.length(); i++){
            ds += Character.digit(s.charAt(i), 10);
        }
        return ds;
    }
}

charをintにキャストしたらそりゃだめだよねうん
それと問題文の理解にちょっと手間取った


500は2時間くらい粘ったけど自力で解けなかった
その後topの人のを参考にして書いちゃったので載せてもしかたねぇ


1000は無理