多多雞有N個魔術盒子(編號1~N),其中編號為i的盒子里有i個球。
多多雞讓皮皮蝦每次選擇一個數字X(1 <= X <= N),多多雞就會把球數量大于等于X個的盒子里的球減少X個。
通過觀察,皮皮蝦已經掌握了其中的奧秘,并且發現只要通過一定的操作順序,可以用最少的次數將所有盒子里的球變沒。
那么請問聰明的你,是否已經知道了應該如何操作呢?
輸入描述
第一行,有1個整數T,表示測試用例的組數。
(1 <= T <= 100)
接下來T行,每行1個整數N,表示有N個魔術盒子。
(1 <= N <= 1,000,000,000)
輸出描述
共T行,每行1個整數,表示要將所有盒子的球變沒,最少需要進行多少次操作。
輸入例子:
3
1
2
5
輸出例子:
1
2
3
思路
典型的利用二進制來做的題
N=6時的示意圖
示意圖上很明顯了,這道題換種問法就是:
N這個數轉化為2進制有幾位?
代碼
#include <stdio.h>
#include <string.h>
int main()
{
int T;
scanf("%d", &T);
while(T--) {
int n;
scanf("%d", &n);
int r = 0;
while(n) {
n /= 2;
r++;
}
printf("%d\n", r);
}
return 0;
}