たいちっち

競技プログラミングをしています

【Java】全探索(B - Break Number)

解いた問題

AtCoderの「B - Break Number」

提出した回答
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int N = sc.nextInt();
        sc.close();

        int result = 1; //出力する値
        int counter_max = 0; //2で割れる回数が1番多いときの値

        for (int i = 1; i <= N; i++) {
            int counter_current = 0; //現在のiが2で割れる回数
            boolean flag = true;
            int tmp = i;
            while (flag) {
                if (tmp % 2 == 0) {
                    tmp /= 2;
                    counter_current += 1;
                } else {
                    flag = false;
                }
            }
            if (counter_max < counter_current) {
                counter_max = counter_current;
                result = i;
            }
        }
            System.out.println(result);
    }
}

全探索で解いた。
2で割れる回数をカウントして、より2で割れる回数が多いものを採用している。

方法は思いついていないが、途中のwhile文を無くしてすっきりさせたい。

TODO
  • 他のA,B問題を解く

 

おわり。。