集団検査 (paizaランク C 相当)
解答例
N通りの候補を2で割っていき、最終的に1通りになればよいです。
偶数を2で割る場合はそのままでよいですが、奇数を2で割る場合、1余りますので、商を切り上げます。
const fs = require("fs");
const input = fs.readFileSync("/dev/stdin", "utf-8").trim();
const lines = input.split("\n");
let N = Number(lines[0]);
let count = 0; //薬品の使用回数
while (N > 1) { //最終的に1通りになればよい
count += 1;
N = Math.round(N / 2); //奇数の場合切り上げる
}
console.log(count); //使用回数を出力
解答例(模範解答参考)
薬の使用回数をans、得られる情報の人数の最大値をnum(=2^ans)とします。
numがN人の住民の数を超えればよいです。
const fs = require("fs");
const input = fs.readFileSync("/dev/stdin", "utf-8").trim();
const lines = input.split("\n");
let n = Number(lines[0]); //n人の住民
let [num, ans] = [1, 0];
while (num < n) { //得られる情報が、n人の住民を超えればよい
num *= 2; //得られる情報は*2得られる
ans++;//薬品を1回使う
}
console.log(ans); //使用回数を出力