z******s 发帖数: 8 | 1 昨天去某公司面试 Software Engineer碰到的最后一道题:
有一种新语言,只能做三种操作。
X=0; 给变量赋值为0;
X++; 递增
LOOP(x){。。} 给定一个变量值就循环X次,循环block可以嵌套定义的三种操作。
题目是给定B,求A=B-1。
想了很久还是没有想出来。。大家可以帮忙看看有什么思路吗? |
r**u 发帖数: 1567 | 2 如果是32 bit的integer,不管unsigned/signed,loop(2^32-1) {X++;},(X + 2^
32) % 2^32 = X, 再-1就对了吧。不知道这个解是不是很ugly,要loop 2^32-1次。
【在 z******s 的大作中提到】 : 昨天去某公司面试 Software Engineer碰到的最后一道题: : 有一种新语言,只能做三种操作。 : X=0; 给变量赋值为0; : X++; 递增 : LOOP(x){。。} 给定一个变量值就循环X次,循环block可以嵌套定义的三种操作。 : 题目是给定B,求A=B-1。 : 想了很久还是没有想出来。。大家可以帮忙看看有什么思路吗?
|
k***e 发帖数: 556 | 3 这个题目在careercup上见过 结果刚才又想了15分钟 :《
C=0;
D=1;
suppose after loop(x), the value of x is unchanged. the loop will run for x
times where x is the value enter the loop and the afterwards value of x will
not influence the loop
loop(B) {
loop(C)
A++;
loop(D)
C=0; C++;
}
【在 z******s 的大作中提到】 : 昨天去某公司面试 Software Engineer碰到的最后一道题: : 有一种新语言,只能做三种操作。 : X=0; 给变量赋值为0; : X++; 递增 : LOOP(x){。。} 给定一个变量值就循环X次,循环block可以嵌套定义的三种操作。 : 题目是给定B,求A=B-1。 : 想了很久还是没有想出来。。大家可以帮忙看看有什么思路吗?
|
s*****r 发帖数: 773 | 4
题目说没有-1这个操作啊
【在 r**u 的大作中提到】 : 如果是32 bit的integer,不管unsigned/signed,loop(2^32-1) {X++;},(X + 2^ : 32) % 2^32 = X, 再-1就对了吧。不知道这个解是不是很ugly,要loop 2^32-1次。
|
r**u 发帖数: 1567 | 5 This is nice. You can remove loop(D), dont you?
C=0;
loop(B) {
loop(C)
A++;
C = 0; C++;
}
x
will
【在 k***e 的大作中提到】 : 这个题目在careercup上见过 结果刚才又想了15分钟 :《 : C=0; : D=1; : suppose after loop(x), the value of x is unchanged. the loop will run for x : times where x is the value enter the loop and the afterwards value of x will : not influence the loop : loop(B) { : loop(C) : A++; : loop(D)
|
l**n 发帖数: 88 | |
b***e 发帖数: 1419 | 7 这个东西叫Chruch Numerals. 不但减一可以定义,四则运算,幂等都可以定义。 严
格的说这个东西和primitive recursion的表达能力是一样的。
这个题本身有很多解法。但是通解如下:
定义isZero(x):
y = 1;
for(x) {
y = 0;
}
return y;
定义not(x):
y = 0;
if (isZero(x)) {
y = 1;
}
return y;
定义bool(x):
return not(not(x));
定义 if(x) then S1 else S2 为:
for(bool(x)) {S1}
for(not(x)) {S2}
有了if/then/else还有什么你不能干的:
pred(x)定义为:
y = 0;
z = 0;
for(x) {
if(z) {
y++;
} else {
z++;
}
}
return y;
【在 z******s 的大作中提到】 : 昨天去某公司面试 Software Engineer碰到的最后一道题: : 有一种新语言,只能做三种操作。 : X=0; 给变量赋值为0; : X++; 递增 : LOOP(x){。。} 给定一个变量值就循环X次,循环block可以嵌套定义的三种操作。 : 题目是给定B,求A=B-1。 : 想了很久还是没有想出来。。大家可以帮忙看看有什么思路吗?
|
c*****o 发帖数: 178 | 8 C = 0;
Loop(B){
A = 0;
Loop(C++){
A++;
}
} |
o********r 发帖数: 79 | |