Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Narkok
0 / 0 / 0
Регистрация: 21.10.2014
Сообщений: 12
#1

Определить массу и количество тыкв, которые будут вывезены первым рейсом - C++

15.09.2015, 17:59. Просмотров 201. Ответов 1
Метки нет (Все метки)

Прежде чем начать вывозить с поля урожай тыкв хозяин решил сформировать такую ​​стратегию загрузки трактора, чтобы первым рейсом вывезти как можно большую массу овощей. При этом он выбирает из двух простых вариантов:
1.послидовно нагружать от легкого до тяжелого тыквы;
2.послидовно нагружать от тяжелого до легкого тыквы.
Если же эти две стратегии дают одинаковую массу, то желательно, чтобы количество тыкв была как можно больше. Конечно, хозяин не намерен перегружать трактор, поэтому учитывает его допустимую нагрузку. Составьте программу, чтобы с известным количеством тыкв, их массами и допустимой нагрузкой трактора определить массу и количество тыкв, которые будут вывезены первым рейсом.

Входные данные:
Из стандартного входного потока в отдельных строках вводятся натуральные числа: P - допустимая нагрузка трактора (0 <P <2000); N - количество тыкв (0 <N <500) N целых чисел mi - массы каждого из тыкв (0 <mi <100).

Исходные данные:
В стандартный выходной поток вывести два целых числа, разделенных пробелом - массу и количество тыкв, которые будут вывезены первым рейсом.

Просьба решить на с++ . Заранее спасибо !!!

П.с.: тесты
100 10
40 10 40 20 30 20 30 10 10 40 / 100 6
200 8
10 100 20 20 50 60 10 90 / 190 2
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.09.2015, 17:59     Определить массу и количество тыкв, которые будут вывезены первым рейсом
Посмотрите здесь:

C++ Определить количество чисел, меньших n, которые не делятся на 11
C++ Определить количество слов, которые содержат введенный символ
Найти количество элементов массива, которые находится между первым и последним отрицательным элементом C++
C++ Определить количество цифр, которые принадлежат заданным интервалам
Определить количество лет, в которые количество осадков превышало среднегодовое C++
Определить количество чисел, которые принадлежат заданному диапазону C++
C++ Определить в последовательности количество слов, которые начинаются с буквы a
C++ Определить количество чисел, которые не принадлежат заданному интервалу
Определить количество элементов между первым и последним нулевыми элементами C++
C++ Вводить массив символов до тех пор, пока два последних введенных символа не будут равны двум первым
C++ Определить количество лет, в которые количество осадков превышало среднегодовое
Определить количество строк матрицы, которые упорядочены по возрастанию C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kerry_Jr
Модератор
 Аватар для Kerry_Jr
2041 / 1837 / 639
Регистрация: 14.05.2014
Сообщений: 5,365
Записей в блоге: 1
Завершенные тесты: 5
16.09.2015, 12:28     Определить массу и количество тыкв, которые будут вывезены первым рейсом #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Narkok, вот такой велосипед
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
#include <iostream>
#include <vector>
#include <algorithm>
 
int calc(const std::vector<int> v, const int p, int &count)
{
    int sum = 0;
    for (int i = 0; i < v.size(); ++i)
    {
        if (sum < p)
        {
            sum += v[i];
            ++count;
        }
        else if (sum > p)
        {
            sum -= v[i-1];
            --count;
            break;
        }
        else break;
    }
    return sum;
}
 
int main()
{
    int p, n, sum1 = 0, sum2 = 0, count1 = 0, count2 = 0;
    std::cin >> p >> n;
    std::vector<int> v(n);
    for_each(v.begin(), v.end(), [](int &i){ std::cin >> i; });
    std::sort(v.begin(), v.end(), [](int i, int j){ return i < j; });
    sum1 = calc(v, p, count1);
    std::sort(v.begin(), v.end(), [](int i, int j){ return i > j; });
    sum2 = calc(v, p, count2);
    if (sum1 > sum2 || (sum1 == sum2 && count1 > count2))
        std::cout << sum1 << ' ' << count1 << std::endl;
    else 
        std::cout << sum2 << ' ' << count2 << std::endl;
    
    return 0;
}
Yandex
Объявления
16.09.2015, 12:28     Определить массу и количество тыкв, которые будут вывезены первым рейсом
Ответ Создать тему
Опции темы

Текущее время: 12:17. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru