首页 文章

有人可以告诉我为什么它是4? [重复]

提问于
浏览
-10

这个问题在这里已有答案:

考虑以下方法:

public int foo(int n) {
    int x = 1;
    int k = 0;
    while (x <= n) {
        x = x * 2;
        k = k + 1;
    }
    return k;
}

foo(13) 返回什么值?我知道答案是4但有人可以告诉我为什么它是4?

6 回答

  • 0

    以下是步骤/算法步骤:

    X=1 k=0 n =13
    
    Step 1: x=2 k=1 
    
    Step 2: x=4 k=2
    
    Step 3: x=8 k = 3. Since 8<13...
    
    Step 4: x=16 k= 4. 16>13, so return k=4.
    
  • 0

    它的发现n <2 ^ k,其中k是你的答案 . 当n = 13时:13 <2 ^ k = 2 ^ 4 = 16 .

  • 3

    x 每步加倍,直到它变得大于 13 . 所以 x = 1 -> 2 -> 4 -> 8 -> 16 . 所以它增加了4倍, k 也增加了 4 次 . 所以从 0 变成 4 .

  • 1

    K是输入while循环的次数 .

    由于x是2次幂,2 ^ 3小于13,所以最后一次进入,2 ^ 4大于13,然后k为4

  • 0

    很简单......

    public int foo([13]) {
        int x = 1;
        int k = 0;
        while (x <= n) {
            x = x * 2;
            k = k + 1;
        }
        return k;
    }
    

    当x大于或等于n时,你的while循环停止[13]

    每次x乘以2

    (定义)x = 1

    • x = 2

    • x = 4

    • x = 8

    • x = 16(现在超过n [13])

    所以while循环运行4次

    while (x <= n) {
                x = x * 2;
                k = k + 1;//dis thang
            }
    

    k [0] 1 = 1

    k [1] 1 = 2

    k [2] 1 = 3

    k [3] 1 = 4

    这就是为什么它的4 .

  • 1

    x 通过循环每次迭代加倍, k 每次增加1 .

    用 table 绘制就足够了 .

    x  |  k 
    1  |  0  
    2  |  1
    4  |  2
    8  |  3
    16 |  4
    32 | <end of loop>
    

相关问题