2015-05-15 4 views
-10

Рассмотрим следующий метод:Может кто-нибудь, пожалуйста, скажите мне, почему это 4?

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?

+4

есть ли что-то еще вы думаете, это должно быть? Вы пробовали просто пройти последовательность шагов, которые программа выполнила бы? – user2357112

+0

Действительно ???Я имею в виду, к тому времени, как вы написали вопрос, вы могли бы сделать расчет, используя ваши пальцы. – Setu

+1

Забавно, как много внимания привлекает этот вопрос. – Celeritas

ответ

1

x удваивается на каждом шагу, пока он не станет больше, чем 13. Итак, x = 1 -> 2 -> 4 -> 8 -> 16. Таким образом, это удваивается 4 раз и k также увеличивается на 4 раз. Так от 0 будет 4.

0

Его вывод n < 2^k где k - ваш ответ. Когда n = 13: 13 < 2^k = 2^4 = 16.

3

x удваивает каждую итерацию через петлю, а k увеличивается на 1 каждый раз.

Это достаточно просто, чтобы протянуть со столом.

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

K - это число, в которое вводится цикл while.

В х 2 мощности, 2^3 мало, чем 13, так что он входит в последний раз, 2^4 больше, чем 13, а то к 4

1

Ниже шаги шаг/алгоритм:

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

довольно просто ...

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

ваш цикл в то время останавливается, когда х больше или равно п [13]

каждый раз, когда х умножается на 2

(определение) х = 1

  1. х = 2

  2. х = 4

  3. х = 8

  4. х = 16 (теперь превышает n [13])

и поэтому цикл в то время как бежит 4 раза

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

к [0] + 1 = 1

к [1] ​​+ 1 = 2

к [2] + 1 = 3

к [3] + 1 = 4

и вот почему его 4.

Смежные вопросы