С Новым годом! Форум программистов, компьютерный форум, киберфорум
Java EE (J2EE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
1 / 1 / 1
Регистрация: 24.12.2013
Сообщений: 76

Поиск наилучшего варианта

03.11.2017, 10:43. Показов 1161. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как построить алгоритм работы задачи?
Пусть имеется набор из n рандомных чисел. и есть число, которое задается пользователем.
Необходимо выбрать те, которые в сумме образуют заданное число.

можно идти пузырьковым методом и сравнивать сначала сложение двух чисел, потом трех.. но это долго, как сделать это рациональнее?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
03.11.2017, 10:43
Ответы с готовыми решениями:

Поиск в таблице наилучшего варианта, подподающего под критерии
Есть БД с таблицей объектов, и поиск по объектам, который может искать по нескольким параметрам (спасибо здешним форумчанам!). Теперь...

Поиск наилучшего варианта недорогой, но более менее хорошей материнки с памятью DDR III
Добрый вечер всем Подскажите пожалуста несколько вариантов ( 3 - 4)недорогой но более менее хорошей материнки с памятью DDR III Обьясню...

Тетрис. Выбор наилучшего варианта расположения 4 фигур
Вы так «подсели» на новую компьютерную игру «Тетрис Онлайн», что решили реализовать игрового бота для автоматизации «прокачки», который...

2
 Аватар для Gr1f0nn
244 / 164 / 133
Регистрация: 30.09.2012
Сообщений: 690
05.11.2017, 14:12
Лучший ответ Сообщение было отмечено brodoladobar как решение

Решение

Не самое красивое решение получилось, может подтолкнет на лучшую мысль:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
public class Main {
    public static boolean foo(Integer[] A, int digit, int acc, int index, ArrayList<Integer> B) {
        if (index >= A.length || acc > digit) {
            B.clear();
            return false;
        }
        if (A[index] == digit || A[index] + acc == digit) {
            B.add(A[index]);
            return true;
        }
 
        if (A[index] + acc <= digit) {
            B.add(A[index]);
            return foo(A, digit, acc + A[index], index + 1, B) || foo(A, digit, acc, index + 1, B);
        }
        else {
            return foo(A, digit, acc, index + 1, B);
        }
    }
 
    public static void main(String[] args) throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
 
        int n = Integer.parseInt(reader.readLine());
        int digit = Integer.parseInt(reader.readLine());
 
        Integer[] a = new Random().ints(1, 50).limit(n).boxed().toArray(Integer[]::new);
        Arrays.sort(a, 0, a.length, Comparator.reverseOrder());
 
        ArrayList<Integer> result = new ArrayList<>();
 
        System.out.println(Arrays.toString(a));
        if (foo(a, digit, 0, 0, result)) {
            System.out.println(result);
        } else {
            System.out.println("False");
        }
    }
}
Добавлено через 1 минуту
Цитата Сообщение от brodoladobar Посмотреть сообщение
можно идти пузырьковым методом и сравнивать сначала сложение двух чисел, потом трех.. но это долго, как сделать это рациональнее?
Первое, что приходит в голову, это использовать жадный алгоритм и надеяться, что нужная сумма получится как можно раньше
0
22 / 22 / 2
Регистрация: 01.05.2016
Сообщений: 42
07.11.2017, 14:25
Здравствуйте, это задача о рюкзаке, погуглите очень много примеров.
Один из таких например отсортировать массив из n чисел, а потом суммировать и сравнивать с заданным числом

array - (2, 3, 4, 5, 6, 7, 8, 9)
searchKey - 15

9 + 2 > 15
9 + 2 + 3 > 15
9 + 2 + 3 + 4 > 15
9 + 3 ... > 15
....
9 + 6 = 15
0
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru