NiukeXiaobaiyueコンテスト32C。整数削減(Java)

整数を引く

タイトルリンク: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();
	}
}

おすすめ

転載: blog.csdn.net/weixin_45894701/article/details/115056572