Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
1 / 1 / 0
Регистрация: 09.04.2023
Сообщений: 61
1

Разложить книги по группам наилучшим образом

06.12.2023, 10:15. Показов 815. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
В книжном магазине действует акция "Возьми 3 книги, а заплати за 2 книги". Таким образом, каждый покупатель, выбравший 3 книги, получает самую дешевую из них бесплатно. Конечно, клиент может взять еще больше книг и, в зависимости от того, как книги распределены по группам из трех, бесплатно получить самую дешевую в каждой группе.
Например, пусть цены на книги, взятые клиентом, будут следующими: 10 3 2464 9. Если он распределит их по группам: (10, 3, 2), (4, 6, 4) и (9), он получит книгу по цене 2 из первой группы и книгу по цене 4 из второй группы бесплатно. Мы видим, что из третьей группы он ничего не получит бесплатно, потому что в ней только одна книга.
У продавщицы, работающей в книжном магазине, благие намерения, и она всегда хочет макси- мально снизить стоимость покупки для каждого посетителя. При данных ценах на книги помогите ей разложить книги по группам наилучшим образом, чтобы общая стоимость, которую должен заплатить покупатель, была минимальной.
Обратите внимание: продавщице не обязательно раскладывать книги по группам, чтобы в каж- дой группе содержались ровно 3 книги, но количество книг в группе должно быть от 1 до 3 вклю-
чительно.
Формат входных данных
В первой строке вводится единственное натуральное число п (1 ≤ n≤ 105) - количество книг, которое берет покупатель.
В следующих и строчках вводится по одному натуральному числу с; (1 ≤ G≤ 105).
1-ой книги.
Формат выходных данных
- стоимость
В единственной строке выведите одно натуральное число - минимальную стоимость, которую должен заплатить покупатель.
Примеры
Стандартный ввод; Стандартный вывод:
4
3
2
3
2
8

6
6
4
5
5
5
5
21

Мой код:
C++
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
40
41
42
43
44
45
46
47
48
49
50
51
#include <iostream>
#include <vector>
#include <climits>
 
using namespace std;
 
int main()
{
    int n{};
    cin >> n;
 
    int cnt = n / 3;
    int cnt2 = 0;
    vector <int> arr;
    arr.resize(n);
 
    for (int i = 0; i < n; i++)
    {
        cin >> arr[i];
    }
 
    for (int i = 0; i < n; i += 3)
    {
        if (cnt2 == cnt)
            break;
        int a1, a2, a3;
        a1 = arr[i];
        a2 = arr[i + 1];
        a3 = arr[i + 2];
        int a = min(a1, min(a2, a3));
        if (a1 == a)
            arr[i] = INT_MAX;
        else if (a2 == a)
            arr[i + 1] = INT_MAX;
        else
            arr[i + 2] = INT_MAX;
        cnt2++;
    }
 
    int sum = 0;
 
    for (int i = 0; i < n; i++)
    {
        if (arr[i] != INT_MAX)
            sum += arr[i];
    }
 
    cout << sum;
 
    return 0;
}
Помогите пожалуйста, проходит только 2 теста.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.12.2023, 10:15
Ответы с готовыми решениями:

Реализовать работу предприятия в БД наилучшим образом! (автосервис)
Всем кто читает тему, привет. Такие дела, ребята. Моя тема дипломного проекта такая &quot;Автоматизация...

Алгоритм или код как наилучшим образом можно повернуть бланк автоматический
Кто подскажет алгоритм или код как наилучшим образом можно повернуть бланк автоматический....

Подобрать математическую модель, которая будет наилучшим образом описывать исходные данные
Необходимо подобрать модель, которая будет наилучшим образом описывать исходные данные (фото 1). ...

Сравнить ФИО из книги 1 и книги 2, и если совпадают, то в столбец А книги 1, подставить данные из столбца В книги 2
Добрый день! Подскажите, как сделать-есть 2 книги. Нужно сравнить фамилии из книги 1 и книги 2 и...

Каким образом можно вычистить весь код из рабочей книги Excel?
Я имею в виду макросы.

4
Модератор
Эксперт С++
13701 / 10904 / 6472
Регистрация: 18.12.2011
Сообщений: 29,108
06.12.2023, 10:41 2
Цитата Сообщение от Woubat Посмотреть сообщение
быть от 1 до 3 вклю-
чительно.
Woubat, с какой целью "чительно." перенесено на отдельную строку?
Зачем в
Цитата Сообщение от Woubat Посмотреть сообщение
макси- мально
нужно тире?
Цитата Сообщение от Woubat Посмотреть сообщение
1 ≤ n≤ 105
почему 105, а не 105?
0
1 / 1 / 0
Регистрация: 09.04.2023
Сообщений: 61
06.12.2023, 10:43  [ТС] 3
Просто условие задачи нельзя скопировать, через сторонние сайты с картинки в текст перевёл и не прочитал. Сейчас подправлю.
0
2857 / 2004 / 988
Регистрация: 21.12.2010
Сообщений: 3,709
Записей в блоге: 10
06.12.2023, 11:10 4
Лучший ответ Сообщение было отмечено Woubat как решение

Решение

для массива чисел тройка с максимальным профитом - это три максимальных элемента массива. Для оставшегося массива процедуру повторить.
1
1 / 1 / 0
Регистрация: 09.04.2023
Сообщений: 61
06.12.2023, 11:15  [ТС] 5
Вот актуальный, рабочий код:
C++
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#include <iostream>
#include <vector>
#include <climits>
#include <algorithm>
 
using namespace std;
 
int main()
{
    int n{};
    cin >> n;
 
    int cnt = n / 3;
    int cnt2 = 0;
    vector <int> arr;
    arr.resize(n);
 
    for (int i = 0; i < n; i++)
    {
        cin >> arr[i];
    }
    
    sort(arr.begin(), arr.end());
    reverse(arr.begin(), arr.end());
 
    for (int i = 0; i < n; i += 3)
    {
        if (cnt2 == cnt)
            break;
        int a1, a2, a3;
        a1 = arr[i];
        a2 = arr[i + 1];
        a3 = arr[i + 2];
        int a = min(a1, min(a2, a3));
        if (a1 == a)
            arr[i] = INT_MAX;
        else if (a2 == a)
            arr[i + 1] = INT_MAX;
        else
            arr[i + 2] = INT_MAX;
        cnt2++;
    }
 
    int sum = 0;
 
    for (int i = 0; i < n; i++)
    {
        if (arr[i] != INT_MAX)
            sum += arr[i];
    }
 
    cout << sum;
 
    return 0;
}
0
06.12.2023, 11:15
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.12.2023, 11:15
Помогаю со студенческими работами здесь

Найти индекс в массиве книги с указанным инв. номером, который задается случайным образом
Решить, используя массив+for+random Дан массив Num из 20 элементов - инвентарные номера книг в...

Какой производитель изготавливает видеокарты с наилучшим охлаждением
Добрый вечер! Беру видеокарту для игр, нужно определить какой производитель изготавливает...

какую видеокарту с наилучшим быстродействием до 100$ выбрать?
Приветствую! Задался вопросом какая видеокарта с наилучшим быстродействием до 100$? Из...

Описать структуру Bibliotec, содержащую следующие поля: автор книги, инвентарный номер книги, название книги
Описать структуру BIBLIOTEC содержащий следующие поля: автор книги , инвентарный номер книги ,...

Написать программу, реализующую способ передачи книги таким образом, чтобы она переходя от друга к другу побывала в руках у каждого
Помогите вкурить в задание, кому не влом. Т.е. к примеру наше N = 100, значит у чела с...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru