Saber quantas vezes precisamos dividir um número até que o resultado seja 1 ou menos é basicamente calcular o teto do logaritmo deste número.
#include<stdio.h>#include<math.h>intmain(){double C;int N, resposta;scanf("%d",&N);for (int i =0; i < N; ++i) {scanf("%lf",&C);printf("%d dias\n", (int)ceil(log2(C))); }return0;}
#include<iostream>#include<cmath>usingnamespace std;intmain(){double C;int N, resposta; cin >> N;for (int i =0; i < N; ++i) { cin >> C; cout <<ceil(log2(C)) <<" dias"<< endl; }return0;}
var input =require('fs').readFileSync('/dev/stdin','utf8');var lines =input.trim().split('\n');letN=parseInt(lines.shift());for (let i =0; i <N; ++i) {letC=parseFloat(lines.shift());console.log(`${Math.ceil(Math.log2(C))} dias`);}
import mathN =int(input())for _ inrange(N): C =float(input())print(f'{math.ceil(math.log2(C))} dias')
Alternativa 2 - Simulação do processo
Tudo o que você precisa é simular cada dia e quantos suprimentos Blobs terá ao final do dia. Se a quantidade de suprimento for menor ou igual a 1, pode parar o processo e imprimir a resposta.
#include<stdio.h>intmain(){double C;int N, resposta;scanf("%d",&N);for (int i =0; i < N; ++i) {scanf("%lf",&C); resposta =0;while (C >1.0) {++resposta; C /=2; }printf("%d dias\n", resposta); }return0;}
#include<iostream>usingnamespace std;intmain(){double C;int N, resposta; cin >> N;for (int i =0; i < N; ++i) { cin >> C; resposta =0;while (C >1.0) {++resposta; C /=2; } cout << resposta <<" dias"<< endl; }return0;}
var input =require('fs').readFileSync('/dev/stdin','utf8');var lines =input.trim().split('\n');letN=parseInt(lines.shift());for (let i =0; i <N; ++i) {letC=parseFloat(lines.shift());let resposta =0;while (C>1.0) {++resposta;C/=2; }console.log(`${resposta} dias`);}
N =int(input())for _ inrange(N): C =float(input()) resposta =0while (C >1.0): resposta +=1 C /=2print(f'{resposta} dias')