問題はこちら
No.47 ポケットを叩くとビスケットが2倍 - yukicoder
k回叩くと最大2^k枚になる
逆に任意のn≧1に対して、2^(k-1)<n≦2^k … (★)であるとき、ちょうどk回でn枚にできる
なぜならポケットを叩くと、「ポケットに入れていた枚数だけ増える」ので
k-1回で2^(k-1)枚にしたあと、不足分のn-(2^(k-1))枚(これは2^(k-1)以下!)をポケットに入れてもう1度叩けば良い
ということで★式を満たすkを求める問題に帰着
int main(){ int a,b; scanf("%d",&a); for(b=0;a>1<<b;b++); printf("%d",b); return 0; }
圧縮
b; main(a){ for(scanf("%d",&a);a>1<<b;b++); b=!printf("%d",b); }
60B