Не понимаю логи c за проблему - PullRequest
0 голосов
/ 01 мая 2020

Я пытаюсь понять, в чем проблема с моим кодом. Вот задача и мой код:

Напишите метод с именем canPack с тремя параметрами типа int с именем bigCount, smallCount и goal.

  • Параметр bigCount представляет количество больших мешков с мукой (5 кг каждый).

  • Параметр smallCount представляет количество маленьких мешков с мукой (По 1 килограмму).

  • Параметр target представляет целевое количество килограммов муки, необходимое для сборки упаковки.

Следовательно, сумма килограммов bigCount и smallCount должна быть как минимум равна значению цели. Метод должен возвращать значение true, если возможно сделать упаковку с целевыми килограммами муки.

Если сумма больше цели, убедитесь, что для достижения цели используются только полные пакеты. Например, если target = 9, bigCount = 2 и smallCount = 0, метод должен возвращать значение false, поскольку каждый большой мешок весит 5 кг и не может быть разделен. Однако, если цель = 9, bigCount = 1 и smallCount = 5, метод должен возвращать значение true, поскольку 1 полная сумка bigCount и 4 полных сумки smallCount имеют одинаковую цель, и это нормально, если остались дополнительные сумки.

Если какой-либо из параметров отрицательный, вернуть false.

ПРИМЕР ВХОДА / ВЫХОДА:

  • canPack (1, 0, 4); должен вернуть false, поскольку bigCount равен 1 (большой мешок 5 кг), а цель - 4 кг.

  • canPack (1, 0, 5); должен вернуть true, поскольку bigCount равен 1 (большой мешок 5 кг), а цель - 5 кг.

  • canPack (0, 5, 4); должен вернуть true, поскольку smallCount равен 5 (маленькие мешки по 1 кг), а цель - 4 кг, и у нас осталось 1 мешок, что в порядке, как указано выше.

  • canPack (2, 2 11); должен возвращать значение true, поскольку bigCount равен 2 (биг-бэги по 5 кг каждая), а smallCount равен 2 (небольшие мешки по 1 кг), весит всего 12 кг, а цель - 11 кг.

  • canPack (-3, 2, 12); должен возвращать false, поскольку bigCount является отрицательным.

    public static boolean canPack(int bigCount, int smallCount, int goal) {

        int bigCountKilos = bigCount * 5;
        int smallCountKilos = smallCount;

        if (bigCount < 0 || smallCount < 0 || goal < 0) {
            return false;
        } else {

            if (bigCountKilos >= goal && bigCountKilos % goal == 0) {
                return true;
            } else if (bigCountKilos + smallCountKilos >= goal && bigCountKilos % goal == 0) {
                return true;
            } else if (bigCountKilos < goal && bigCountKilos + smallCountKilos >= goal) {
                return true;
            } else {
                return false;
            }
        }
    }

    public static void main(String[] args) {
        System.out.println(canPack(4, 18, 19));
    }

Экземпляр для 4,18,19 должен возвращать true, но это не так. Может кто-нибудь сказать мне, что я делаю не так? Заранее спасибо

Ответы [ 2 ]

0 голосов
/ 01 мая 2020
private static boolean canPack(
    final int bigCount,
    final int smallCount,
    final int goal
) {

    // return goal - Math.min(goal / 5, bigCount) * 5 <= smallCount;

    final int numberOfBigNeeded = goal / 5;
    final int numberOfBigUsed = Math.min(numberOfBigNeeded, bigCount);
    final int remainingKilosFromGoalAfterUsingBig = goal - numberOfBigUsed * 5;
    final boolean hasEnoughSmallToCoverRemainingKilosFromGoalAfterUsingBig = remainingKilosFromGoalAfterUsingBig <= smallCount;
    return hasEnoughSmallToCoverRemainingKilosFromGoalAfterUsingBig;
}
0 голосов
/ 01 мая 2020

Мне кажется, что ваши логики c за нахождением ответа не верны. Операторы if не охватывают все случаи и не дают правильного ответа каждый раз.

Базовый c подход будет выглядеть примерно так:

  • Вычесть 5 от цели, и вычтите 1 из bigCount, когда цель> 0 и bigCount> 0
  • Если цель все еще> 0, проверьте, если smallCount> = цель. Если да, верните true, иначе false.
...