考虑以下方法:
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?
答案 0 :(得分:3)
x
在循环中每次迭代都会加倍,k
每次都会增加1。
用桌子画出来很简单。
x | k
1 | 0
2 | 1
4 | 2
8 | 3
16 | 4
32 | <end of loop>
答案 1 :(得分:1)
x
在每一步都加倍,直到它变得大于13
。所以x = 1 -> 2 -> 4 -> 8 -> 16
。所以它加倍了4次,k
也加了4
次。因此,从0
开始4
。
答案 2 :(得分: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.
答案 3 :(得分:0)
它的发现n&lt; 2 ^ k其中k是你的答案。当n = 13:13
答案 4 :(得分:0)
K是输入while循环的次数。
当x为2次幂时,2 ^ 3小于13,所以最后一次进入,2 ^ 4大于13,然后k为4
答案 5 :(得分:0)
很简单......
Options -Indexes
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /mpl/servicos/smvcf/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+)-([0-9]+)\.html detalhe/$2 [L]
# Force to exclude the trailing slash
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} (.*)/$
RewriteRule ^(.+)/$ $1 [R=307,L]
# Allow any files or directories that exist to be displayed directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?$1 [QSA,L]
</IfModule>
当x大于或等于n [13]
时,你的while循环停止每次x乘以2
(定义)x = 1
x = 2
x = 4
x = 8
x = 16(现在已超过n [13])
所以while循环运行4次
public int foo([13]) {
int x = 1;
int k = 0;
while (x <= n) {
x = x * 2;
k = k + 1;
}
return k;
}
K [0] + 1 = 1
K [1] + 1 = 2
K [2] + 1 = 3
K [3] + 1 = 4
这就是为什么它的4。