@barabash2090

Как добавлять элементы в массив до определенной суммы?

Суть задачи.Есть List который состоит из чисел: 100, 200, 500, и 1000.Нужно добавлять эти элементы в произвольном порядке, и добавлять их в другой List, пока в сумме не получится 1000. После чего вывести этот новый List(сумма элементов которого 1000).
  • Вопрос задан
  • 125 просмотров
Решения вопроса 1
@Yuvis
Изучаю java
Мне кажется, что алгоритм действий будет немного другим. Так как в задаче говорится брать произвольно числа из одного списка и добавлять в другой до тех пор пока сумма не станет равной 1000.
Я думаю что надо сначала рандомно выбирать номер ячейки первого списка, затем положить содержимое этой ячейки в другой список. Затем брать следующее значение тоже рандомно и помещать так же во второй список. После этого сразу проверять сумму и если она меньше 1000, то снова брать и добавлять слагаемое из первого списка. А если сумма больше 1000, то брать другое слагаемое, пока сумма не станет равна 1000.
Придется немного заморочиться с циклами

Думаю как-то так будет это выглядеть
public static void main(String[] args) throws IOException {
        
        List<Integer> numbers = new LinkedList<>();
        numbers.add(100);
        numbers.add(200);
        numbers.add(500);
        numbers.add(1000);

        findSumList(numbers, numbers.size());
    }

    private static void findSumList(List<Integer> inputData, int rangeSize) {

        List<Integer> outData = new LinkedList<>();
        int sum = 0;

        while (sum != 1000){
            final Random random = new Random();
            outData.add(inputData.get(random.nextInt(rangeSize)));

            sum = 0;
            for (int cell : outData){
                sum += cell;
            }

            if (sum > 1000) {
                outData.remove(outData.size() - 1);
            }
        }
        System.out.println(Arrays.toString(new List[]{outData}));
    }
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@g905
Ну например
ArrayList<Integer> l = new ArrayList<>();
        l.add(100);
        l.add(200);
        l.add(500);
        l.add(200);
        l.add(1000);
        ArrayList n = new ArrayList();
        int sum = 0;
        for(int i : l) {
            if (sum >= 1000) {
                break;
            }
            n.add(i);
            sum += i;
        }
        System.out.println(sum);
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы