创建程序更高效

时间:2013-10-15 10:31:37

标签: java

问题,

  • 如果数字x可以除以3
  • ,则返回“a”
  • 如果数字x可以除以5
  • ,则返回“b”
  • 如果数字x可以除以3和5
  • ,则返回“ab”

我的解决方案

 if(x mod 3 ==0 ) return "a"
 else if (x mod 3 == 0) return "b"
 else if (x mod 3 == 0 && x mod 5) return "ab"

还有其他有效的解决方案吗?

8 个答案:

答案 0 :(得分:2)

保存少量计算:

boolean mod3 = x mod 3 == 0
boolean mod5 = x mod 5 == 0
if (mod3 && mod5) return "ab"
if (mod3) return "a"
if (mod5) return "b"

答案 1 :(得分:1)

Iff((x mod 3 == 0)和(x mod 5 == 0))< => (x mod 15 == 0)

if (x mod 15 == 0) return "ab"    
else if(x mod 3 == 0 ) return "a"
else if (x mod 5 == 0) return "b"

答案 2 :(得分:1)

稍微高效......而且肯定更正确......解决方案是:

 if (x mod 3 == 0) {
    if (x mod 5 == 0) {
        return "ab"
    } else {
        return "a"
    }
 } else if (x mod 5 == 0) {
    return "b";
 } else {
    // probably ...
    return "";
 }

请注意,性能上的差异很可能是微不足道的,如果JIT编译器足够智能,它很可能是零。这适用于所有解决方案。

答案 3 :(得分:0)

应该是

 if (x mod 3 == 0 && x mod 5 == 0) return "ab"    
 else if(x mod 3 ==0 ) return "a"
 else if (x mod 5 == 0) return "b"

否则“ab”将不会返回,即使该数字可被3和5

整除

答案 4 :(得分:0)

可替换地:

String result = "";
if (x mod 3 == 0) result += "a";
if (x mod 5 == 0) result += "b";

return result;

但它有字符串连接的开销

答案 5 :(得分:0)

string result = ""
if(x mod 3 == 0 )
{
    result += "a"
}
if(x mod 5 == 0 )
{
    result += "b"
}

return result;

此方法仅将模数3和5检查一次。

答案 6 :(得分:0)

这是您应该经常考虑的经典FizzBuzz问题 第一种情况是公共分隔符,然后按降序进行 像这样:

 if (x mod 3 == 0 && x mod 5) return "ab"    
 else if(x mod 5 ==0 ) return "b"
 else if (x mod 3 == 0) return "a"

答案 7 :(得分:-1)

   String result="";
   result=(x%3 == 0 && x%5 == 0 ? "ab" : x%5 == 0 ? "a" : x%3 == 0 ? "b" : "not divisible to any number" );
   System.out.println(result);