はじめに
自分用の備忘録です。
ABC081B - Shift only , AtCoder Beginners Selection
問題文
次のリンクを参照
ABC081B - Shift only , AtCoder Beginners Selection, https://atcoder.jp/contests/abs/tasks/abc081_b
解答例(自分作)
import java.util.*; class Main { static int count = 0; static boolean flag = true; public static void main(String[] args) { Scanner sc = new Scanner(System.in); int N = sc.nextInt(); int[] A = new int[N]; for (int i = 0; i < N; i++) { A[i] = sc.nextInt(); } while (flag) { // judge for (int i = 0; i < N; i++) { if (A[i] % 2 == 0) { flag = true; } else { flag = false; break; } } if (flag) { count++; // caluculate for (int i = 0; i < N; i++) { A[i] = A[i] / 2; } } } System.out.println(count); } }
ポイント
staticでMainの外にcount, flag変数を置くこと。これをしないと、whileの中で値が参照できなかったりして、めんどくさいんだよね。
while分の中を説明すると、まずはすべての数字が2で割り切れることを確認する。もし、すべて2で割り切れなかったら、flagをfalseにして、ブレイク。 その次にもし、すべて2で割り切れる=flagがtrueなら、実際に2で割って、配列に割った後の値を格納する。