一个简单的函数需要以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
我可以使用逻辑运算符和它们的排序电路行为有助于两个方法:
首先,其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;
}
亲爱的,你真的认为'=='不是条件语句吗? – 2013-03-27 19:10:09
@ArslanAli no == ==有条件的运算符我的意思是比较is-equals – 2013-03-27 19:15:51
@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)
我从你的答案中看到了很好的技巧,'+ 1'给你。 – 2013-03-27 19:37:56
嗨!你为什么那个问题不好?我认为问题很好。 – 2013-03-27 19:44:16
@GrijeshChauhan因为这是一项任务,而不是一个焦点问题。这不是一个可怕的问题,但它也不够完善,并且对“你会怎么做”阅读开放。 – 2013-03-27 19:45:03
有无数的数学公式可以产生7的输入相同的值:这些“变化”可以无限扩展。但是,请考虑所有其他*输入值会发生什么情况。 – 2013-03-27 18:35:05
无论如何,请考虑数组/字符串索引,哈希键,消息名称和throw/catch(我不是在开玩笑)。也切换,除非这也被禁止。 – 2013-03-27 18:37:11
第二个实现使用条件语句。 – nhahtdh 2013-03-27 18:41:18