不使用条件语句检测-1

你好,我在学校被问过这个问题。我似乎无法弄清楚。

在不使用任何条件语句(if/else/switch:case/while/for 等)的情况下编写 ac 程序,其输出:
1535(整数)如果输入是 -1(整数)
否则它输出输入(如果不是 -1)?

问题是评估我的逻辑技能而不是 C 编程技能。

回答

考虑:

(问题是评估我的逻辑技能而不是 C 编程技能)

我认为像“三元运算符不是条件陈述”这样的语言律师违背了问题的精神。因此,让我们从完全无分支的角度来解决这个问题。

对我来说,这直观地感觉像是乘法工作,因为操作的“0 吞噬一切”和“1 导致无操作”属性将允许我们同时管理不同的“路径”。

换句话说,如果我们有一个魔术函数f()which f(0) == 1and f(anything else) == 0,那么我们可以利用x * 0 == 0andx * 1 == x来“组合”两个可能的答案:

int answer(int v) {
  int f_result = f(v + 1); // Offset the -1 to 0, which becomes 1, anything else becomes 0
  int f_inv = f(f_result); // 1 becomes 0, 0 becomes 1

  return 
     v * f_inv + 
     1535 * f_result;
}

所以,我们现在需要的是一个f()0 返回 1,其他任何返回 0。

它只是!一元运算符:int f(int v) { return !v; }


以上是不使用条件语句检测-1的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>