一个简单的函数需要以10种不同的方式实现

问题描述:

我需要一个函数,当给定7时可以返回5,并且当给定5时可以返回7。 我需要它通过10种不同的技术(全部没有条件语句)。一个简单的函数需要以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 
+6

有无数的数学公式可以产生7的输入相同的值:这些“变化”可以无限扩展。但是,请考虑所有其他*输入值会发生什么情况。 – 2013-03-27 18:35:05

+1

无论如何,请考虑数组/字符串索引,哈希键,消息名称和throw/catch(我不是在开玩笑)。也切换,除非这也被禁止。 – 2013-03-27 18:37:11

+0

第二个实现使用条件语句。 – nhahtdh 2013-03-27 18:41:18

我可以使用逻辑运算符和它们的排序电路行为有助于两个方法:

首先,其myown:

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; 
} 

五十:你自己的XOR

int r(int x){ 
    x = (x & ~2) | (~x & 2) ; 
    return x; 
} 
+0

亲爱的,你真的认为'=='不是条件语句吗? – 2013-03-27 19:10:09

+1

@ArslanAli no == ==有条件的运算符我的意思是比较is-equals – 2013-03-27 19:15:51

+1

@ArslanAli == ==是等号运算符。 if是一个条件语句(实际上它是Ruby中的一个表达式,但是这是一个离题)条件语句“有条件地做某事”,例如根据输入执行一个分支或另一个分支比较运算符的结果 – 2013-03-27 20:03:28

这里有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 

我不认为这是一个很好的问题,但我认为有一个机会在这里学习一些不同的想法。 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 

Array枚举方法 - 学习它们。这里我们只计算一个特定值(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) 
+0

我从你的答案中看到了很好的技巧,'+ 1'给你。 – 2013-03-27 19:37:56

+0

嗨!你为什么那个问题不好?我认为问题很好。 – 2013-03-27 19:44:16

+0

@GrijeshChauhan因为这是一项任务,而不是一个焦点问题。这不是一个可怕的问题,但它也不够完善,并且对“你会怎么做”阅读开放。 – 2013-03-27 19:45:03