Оценка того, могут ли 2 введенных значения переменной суммироваться с введенным значением - PullRequest
0 голосов
/ 19 июня 2020

Я работаю над небольшой программой, в которой метод принимает 3 int, bigCount smallCount и цель. Эти переменные должны представлять количество мешков с мукой двух размеров: значение веса bigCount - 5 кг на мешок, значение веса smallCount - 1 кг на мешок, а цель - это целевой вес коробки, в которой будут находиться мешки.

например, bigCount = 1, bigCount = 1, smallCount = 0, goal = 4

Должно возвращать значение false, поскольку bigCount дается значение 1, а 1 значение в bigCount представляет мешок весом 5 кг и, следовательно, мешки, которые у вас есть, никогда не поместятся в коробку с требованием веса 4. value, если значения bigCount и smallCount могут быть добавлены в комбинации для суммирования веса, указанного в целевой переменной.

Я чувствую, что есть гораздо более разумный способ go об этом, но я могу ' • придумать алгоритм, который мог бы просто завершить все это без всех этих операторов if и else if. В настоящее время logi c для некоторых из этих операторов if неверен и не улавливает весь сценарий ios для правильной работы.

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

            boolean isPackable = false;
            int bigBKilo = bigCount*5;
            int smallBKilo = smallCount*1;

            int remain5 = goal %5;

            int remainTest = 6 %5;

            int sum = bigBKilo+smallBKilo;

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

                if(remain5 > 0 && remain5 <= smallCount && smallCount >= goal) {
                    isPackable = true;
                }
                else if(remain5 == 0 && bigCount > 0){
                    isPackable = true;
                }
                else if(bigCount == 0 && smallCount >= goal){
                    isPackable = true;
                }
                else if(smallCount ==0 && remain5 == 0){
                    isPackable = true;
                }
                else if(sum == goal){
                    isPackable = true;
                }
                else if(bigBKilo < goal && remain5 <= smallCount){
                    isPackable = true;
                }
                else if(bigCount == 0 && smallCount < goal){
                    isPackable = false;
                }
                else{
                    isPackable = false;
                }
            }

            return isPackable;


        }//end method

1 Ответ

2 голосов
/ 19 июня 2020

Один из возможных способов решить задачу с помощью математики:

  1. Выберите самый большой мешок
  2. Постарайтесь уместить как можно больше из них в коробку (ограничено по цели коробки и количеству доступных мешков) - выполнив некоторые вычисления как можно больше тех, кто находится в оставшемся пространстве
  3. Повторяйте, пока у вас не закончатся сумки или оставшееся место не станет 0

Я думаю, вы сможете реализовать этот алгоритм самостоятельно .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...