2013-10-15 2 views
-4

проблемы,создать программу более эффективной

  • возврата «а», если число х можно разделить на 3
  • возврата «б», если число х, можно разделить на 5
  • возврата «AB» если число х можно разделить на 3 и 5

мое решение

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" 

есть ли другое эффективное решение, чем это?

+1

Этот вопрос ошибочна. Вероятно, в этом коде производительность не имеет значения *. Правильность, безусловно, важнее. –

+0

(И ... если вы еще не наткнулись ... ваше решение неверно, в соответствии с пониманием большинством людей этой «спецификации».) –

ответ

1

Ифф ((х мод 3 == 0) и (х мод 5 == 0)) < => (х мод 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" 
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

+1

все еще проблема: нет x мод 5 – bsmk

+0

@bsmk Спасибо вы ... обновили – upog

-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); 
+0

Этот код даже не компилируется. –

+0

Я даю шаблон кода. – Dev

0

В качестве альтернативы:

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

return result; 

Но он имеет верхние строчки конкатенации строк

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

return result; 

Этот подход проверяет по модулю 3 и 5 только один раз.

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" 
+0

Этот подход должен быть самым быстрым. –

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

Обратите внимание, что разница в производительности, скорее всего ИНСИ gonificant, и вполне возможно, что он равен нулю, если JIT-компилятор достаточно умен. Это относится к всем решениям.

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" 
Смежные вопросы