-5

问题,

  • 如果数字 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"

除了这个还有其他有效的解决方案吗?

4

8 回答 8

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"
于 2013-10-15T10:38:30.433 回答
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"
于 2013-10-15T10:38:32.277 回答
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 编译器足够聪明的话。这适用于所有解决方案。

于 2013-10-15T10:39:24.423 回答
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"

否则即使数字可以被 3 和 5 整除,也不会返回 "ab"

于 2013-10-15T10:33:11.803 回答
0

或者:

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

return result;

但它有字符串连接的开销

于 2013-10-15T10:37:58.510 回答
0
string result = ""
if(x mod 3 == 0 )
{
    result += "a"
}
if(x mod 5 == 0 )
{
    result += "b"
}

return result;

这种方法只检查一次 3 和 5 的模数。

于 2013-10-15T10:38:02.363 回答
0

这是经典的FizzBu​​zz 问题,您应该始终将第一种情况视为公共分隔符,然后按降序进行,如下所示:

 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"
于 2013-10-15T10:40:42.510 回答
-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);
于 2013-10-15T10:37:17.783 回答