2014-09-04 4 views
0

Когда я использую следующий код для MakeChocolate, он проходит все тесты примерно в 50% случаев и не выполняет последние 4 набора с ошибкой Timeout около 50% время. Может ли кто-нибудь объяснить, почему это работает некоторое время, но не в другое время? (Я буквально ничего не меняю между испытаниями, я просто нажимаю кнопку «Go», и иногда это работает, а иногда нет).Странное поведение Java в CodingBat (Java Logic-2 MakeChocolate)

Возможно, это ошибка подключения или что-то в этом роде? Если бы кто-нибудь из вас, ребята, попробовал его в вашем браузере и посмотрел, воспроизводится ли он?

public int makeChocolate(int small, int big, int goal) { 
    if ((goal - big*5) <= small && (goal %5) <= small) { 
    int counter = 0; 
    List<Integer> myList = new ArrayList(); 

    while(counter - big <= 0) { 
     if ((goal - counter*5) >= 0) { 
     myList.add(goal - counter*5); 
     } 
     counter += 1; 
    } 
    return myList.get(myList.size() - 1); 
    } 

    else { 
    return -1; 
    } 
} 

ответ

1

Нет, никаких проблем ни в Java, ни в CodingBat, ни в сетевой скорости. Это просто означает, что код, который вы написали, завершает все тесты «как раз вовремя», когда он делает это, а также «просто не удается» сделать это, когда это не так. Чтобы подтвердить, что я тестировал различные коды и выяснил, что тесты последних четырех тестов не работают для некоторых кодов, потому что код просто не так эффективен. например, первый код, который я использовал (очень простой фрагмент кода): -

public int makeChocolate(int small, int big, int goal) { 
    int ans= -1; 


    for(int i = 1; i <= small; i++){ 
    if(i + (big * 5) == goal){ 
    ans = i; 
    } 

    }return ans; 
} 

Очевидно, что этот код не прошел все испытания, но из-за его низкой сложности он был в состоянии передать эти последние четыре испытания. Другой код я использовал это: -

public int makeChocolate(int small, int big, int goal) { 
    int ans= -1; 

for(int j = 1; j <= big; j++){ 
if(j * 5 < goal){ 
    for(int i = 1; i <= small; i++){ 
    if(i + (j * 5) == goal){ 
    ans = i; 
    }}} 
    else if(j * 5 == goal){ 
    ans = 0;} 
    else{ for(int i = 1; i <= small; i++){ 
    if(i== goal){ 
    ans = i;}}}}return ans; 
} 

Этот код был в состоянии пройти все вышеуказанные испытания, но не смог пройти в codingbat требуется срок, последние четыре испытания. Испытание, которое он не может пройти вовремя по мне, - это тот, где значения превышают тысячи. Вам придется изменить свой код, чтобы быть немного более эффективным, если вы получаете его в срок в 50% случаев. Удачи.

+0

Спасибо за подробный ответ! :) – jj172

Смежные вопросы