整数を引く
タイトルリンク:https://ac.nowcoder.com/acm/contest/11163/C
タイトル説明
正の整数Hが与えられた場合、1から減算を開始し、最初に1を減算する必要があります。減算する数は、前回と同じか、前回の2倍である必要があります。Hを0に減らすには、少なくとも数回かかります。 。。
説明を入力してください:
最初の行は正の整数1≤T≤10^ 4を与えます
次のTラインのラインごとに1つのH、1≤H≤10^ 9
出力の説明:
各行の正の整数は、最小回数を表します
例1
入力
3
3
5
7
出力
2
3
3
問題解決のアイデア:
まず、最小回数を確保するために1から減算を開始し、すべての減算は2の倍数になります。最初にHが偶数の場合、奇数の場合は1を2回減算する必要があります。 1を1回引き、ansで数えます。
コードは次のように表示されます。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int t = sc.nextInt();
for (int i = 0; i < t; i++) {
int H = sc.nextInt();
int ans = 0;
while (H > 0) {
if ((H & 1) == 1)
H >>= 1;
else
H--;
ans++;
}
System.out.println(ans);
}
System.out.println();
}
}