白駿Baekjoon 1094号棍子-JAVA


https://www.acmicpc.net/problem/1094
質問する
チミンには長さ64 cmの棒がある.ある日、彼は長いXcmの棒がほしいです.志敏は元の棒をもっと小さい棒に切って、接着剤でくっついて、長いXcmの棒を作りたいと思っていました.
棒を切るのが一番簡単な方法は半分に切ることです.志敏は以下の過程で棒を切るつもりだ.
志敏のすべての棒を合わせます.最初は64センチの棒しかありませんでした.このとき、和がXより大きい場合は、次の手順を繰り返します.
持ち棒の中で最も短い長さを半分に切ります.
上から切り取ったレバーから1本を取り除き、残りのレバーの長さの和がX以上であれば、上から切り取ったレバーから1本を取り除く.
今、残りの棒を接着剤でくっつけてXcmにします.
Xが与えられた場合、上記の手順を経た場合、接着剤で何本貼り付けてXcmを作成できるかを決定するプログラムを作成します.
入力
1行目はXです.Xは64以下の自然数である.
しゅつりょく
問題の処理をすれば、出力は接着剤でロッドを何本かくっつけてXcmを作ることができます.
入力例1
23
サンプル出力1
4
入力例2
32
サンプル出力2
1
入力例3
64
サンプル出力3
1
入力例4
48
サンプル出力4
2
import java.util.Scanner;

public class Main {
	@SuppressWarnings("resource")
	public static void main(String args[]) {
		double bar = 64;
		double x = new Scanner(System.in).nextDouble();

		int w = 0;
		while (x > 0) {
			if (bar > x)
				bar /= 2;
			else {
				x -= bar;
				w++;
			}
		}
		System.out.println(w);
	}
}
  • 説明
  • 最初はarraylistを使用してすべてのバーの長さを格納しようとしたが、明確な基準でバーを分割した.
    その基準に従ってn回の演算を行うとそのバーの大きさがわかる.
  • xの値は0と比較する、whileサイクル開始後、ストリップのw+(プールに貼り付ける回数)
  • を毎回減少させる.