0

我需要一个函数,它可以在给定 7 时返回 5,并且在给定 5 时可以返回 7。但不允许使用条件语句。我需要通过 10 种不同的技术(都没有条件语句)。

但是,我已经以 5 种不同的方式实现了。如果你帮我写其他5个,那将是一种乐趣:)

int returner( int input ) {
    return 12 - input;
}


int returner( int input ) {
    if(input != 0) {
        return 35 / input;
    }
    return 0;
}


int returner( int input ) {
    return input ^= 2;
}


int returner( int intput ) {
    return ( 7 % input ) + 5;
}

最后,在红宝石中

def returner(input)
    return ([5,7]-[input]).pop
end
4

3 回答 3

2

这里还有5个:

p RUBY_VERSION
require 'set'

def fun1(x)

 [5,7].to_set.delete(x).to_a[0]

end

p fun1(7)

def fun2(x)

 a = [5,7].to_set
 b = [x].to_set
 p a.difference(b).to_a[0]

end

fun2(5)

def fun3(x)

 a = [5,7]
 a.slice!(a.index(x),1)
 p a[0]

end

fun3(5)

def fun4(x)
 a = [5,7]
 a.delete(x)
 p a[0]
end

fun4(5)

def fun5(x)

 a = '57'
 a = a.rpartition(7.to_s)
 p a[a.index(7.to_s)].to_i

end

fun5(7)

输出:

"2.0.0"
5
7
7
7
5
于 2013-03-27T18:59:19.357 回答
2

我不认为这是一个很好的问题,但我认为有机会在这里学习一些不同的想法。i代表输入。尝试以下操作,i=7然后将“其他任何内容”作为输入。请注意,这些方法都没有对输入值使用数学。

注意:需要对这些进行调整以返回逆-作为练习。

哈希。默认情况下,失败的查找返回nil。可以使用 指定默认值Hash.new

h = {7: 5}
h[i] // 5 or nil

h = Hash.new(0)
h[7] = 5
h[i] // 5 or 0

数组枚举方法 - 学习它们。在这里,我们只计算存在多少特定值 (7) 的元素。

a = [7,7,7,7,7]
a.grep {|x| x == i }.count  // 0 or 5
// or more idiomatic
a.count(i)

布尔运算符链接 - 和的结果&&||成功的表达式或“最少失败”的表达式。

i == 7 && 5        // false or 5
(i == 7 && 5) || 0 // 0 or 5

错误使用throw/catch和内联异常填充。

catch (:"7") do
    throw i.to_s.to_sym rescue nil;
    // only here if i is not 7 or convertible to "7" AND
    // there is no matching catch further up
    return 0
end
return 5

在类似的说明中,如何在没有if. 当然,如果函数域只有{5, 7},那么即使这也不是必需的,因为 0 永远不可能是 [有效] 输入 - 并且无效输入在方法合同之外。

return (35 / i rescue 0)
于 2013-03-27T19:08:19.230 回答
1

我可以使用逻辑运算符及其排序电路行为再贡献两种方法:

首先,它自己的:

int r(char x){
    (x == 7 && (x=5)) || ( (x == 5) && (x=7));
    return x;
}
int main(){
    printf("\n If r(5) then return = %d", r(5));
    printf("\n If r(7) then return = %d", r(7));

    printf("\n");
    return 1;
}

跑:

$ ./a.out 

 If r(5) then return = 7
 If r(7) then return = 5

其次,几天前我看到了这个技巧:

int r(char x){                      
    int l[8] = {0,0,0,0,0,7,0,5};
    return l[x];
}  

第三:我第一次使用的技巧使用

int r(char x){
    (x > 5 && (x=5)) || (x < 7 && (x=7));
    return x;
}

第四

int r(char x){
    ((x & 2) && (x&=~2)) || ( (!(x & 2)) && (x|=2));
    return x;
}

五十:你自己的异或

int r(int x){
    x = (x & ~2) | (~x & 2) ;
    return x;
}
于 2013-03-27T18:56:34.637 回答