[編程題]多多的魔術盒子

多多雞有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;
}
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。