##はじめに
ABC081B - Shift onlyを実際の操作のシミュレーションでのカウントではなく、
2で割れる回数の最小値から導く方法です。
package main
import (
"fmt"
)
func main() {
var n int
min := 1000000000 // Aiの取りうる値の最大値
fmt.Scanf("%d", &n)
nums := make([]int, n)
// n個の値を取得
for i := 0; i < n; i++ {
fmt.Scan(&nums[i])
}
for i :=0; i < n; i++ {
lcnt := 0;
// 2で割り切れる限り回し続ける
for nums[i]%2 == 0 {
nums[i] = nums[i]/2
lcnt++ // 割った数をカウント
}
// 最小値より小さいカウントの場合入れ替え
if min > lcnt {
min = lcnt
}
}
fmt.Println(min)
}
##おわりに
説明文の操作の通り上から順序よく処理したくなりますが、選択肢として持っておきたいため書きました。